如何让访问者等待,直到一个方法在MVC中完成

本文关键字:方法 一个 MVC 访问者 等待 | 更新日期: 2023-09-27 18:18:45

我有一个网站,当它启动时,它可能需要20秒,直到它准备好了。这个创业项目是由一个访客在偏离轨道时完成的。但是,当网站启动时,也有可能出现另一个访问者。在本例中,我希望访问器等待我的方法(由第一个访问器调用)完成。然后他/她可以进入主页。

我该怎么做?让每个访问者等待,直到我的方法完成加载?

编辑:方法可以采取一段时间从我的global.asax

如何让访问者等待,直到一个方法在MVC中完成

只是存储一个简单的布尔标志的地方:在一个静态字段,数据库,缓存,每当第二个用户试图访问网站,你检查是否设置了标志,如果它是,你做你想要的与该用户。

while (ShouldWait())
{
    // Wait 5 seconds and check again
    Thread.Sleep(5000);
}

下面是一个工作示例:

public class StartupFilterAttribute : ActionFilterAttribute
{
    private static bool isReady = false;
    private static bool isStartingUp = false;
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (isReady) return;
        if (!isStartingUp) 
        {
            isStartingUp = true;
            DoLongRunningOperation();
            isReady = true;
            return;
        } 
        while (!isReady) 
        {
            Thread.Sleep(5000);
        }
    }
    private void DoLongRunningOperation() 
    {
        Thread.Sleep(20000);
    }
}

你需要全局注册它:

protected void Application_Start()
{
    GlobalFilters.Filters.Add(new StartupFilterAttribute());
}

理想情况下,这需要使用async/await关键字重写。