如何让访问者等待,直到一个方法在MVC中完成
本文关键字:方法 一个 MVC 访问者 等待 | 更新日期: 2023-09-27 18:18:45
我有一个网站,当它启动时,它可能需要20秒,直到它准备好了。这个创业项目是由一个访客在偏离轨道时完成的。但是,当网站启动时,也有可能出现另一个访问者。在本例中,我希望访问器等待我的方法(由第一个访问器调用)完成。然后他/她可以进入主页。
我该怎么做?让每个访问者等待,直到我的方法完成加载?
编辑:方法可以采取一段时间从我的global.asax
只是存储一个简单的布尔标志的地方:在一个静态字段,数据库,缓存,每当第二个用户试图访问网站,你检查是否设置了标志,如果它是,你做你想要的与该用户。
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关键字重写。