这是我的代码
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
Thread t1 = new Thread(DoLengthyOperation);
t1.Start();
return View();
}
public ActionResult About()
{
//Check if thread t1 is completed or not, if not keep waiting.
return View();
}
public void DoLengthyOperation()
{
Thread.Sleep(10000);
}
我想做的是什么
1)在Home动作中启动长过程,因为该过程不会返回任何内容,因此没有等待等待
2)在我的“关于”操作中,我想检查过程是否已启动“主页”操作是否已完成,如果没有,则等待直至完成。
我已经尝试过静态实例,但这对同时请求没有帮助,
我也尝试了全局变量但是这并没有帮助,因为每个请求都获得了控制器的新副本。
我的最终目标是当用户查看索引页面时,我的漫长过程应该在后台完成,我的过程需要20秒
任何帮助将不胜感激,
谢谢
答案 0 :(得分:0)
使用任务,并将其存储在会话状态字典中。
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
var longRunningTask = Task.Factory.StartNew( DoLengthyOperation );
Session["MyApp_SessionTask"] = longRunningTask;
return View();
}
public ActionResult About()
{
// Note that the below Wait method has a bunch of overloads you can use
// i.e. only wait up until a fixed timeout, wait until a separate cancellation
// token is signaled, etc.
var longRunningTask = (Task) Session["MyApp_SessionTask"];
if ( longRunningTask != null )
longRunningTask.Wait();
return View();
}
请注意,如果您未使用进程内会话状态,则无效。