C# mvc3操作之间的线程同步

C# mvc3操作之间的线程同步,c#,.net,multithreading,asp.net-mvc-3,C#,.net,Multithreading,Asp.net Mvc 3,这是我的密码 public ActionResult Index() { ViewBag.Message = "Welcome to ASP.NET MVC!"; Thread t1 = new Thread(DoLengthyOperation); t1.Start(); return View(); } public ActionResult About() { //Check

这是我的密码

 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 action中启动长流程,因为该流程不返回任何内容,所以等待没有意义
2) 在我的“关于”操作中,我想检查流程启动的“主页”操作是否已完成,如果未完成,则等待其完成。
我尝试过静态实例,但这对同时请求没有帮助,
我也尝试过全局变量,但这并没有帮助,因为每个请求都会得到控制器的新副本。
我的最终目标是,当用户查看索引页时,我的长过程应该在后台完成,我的过程需要20秒。
任何帮助都将不胜感激,

谢谢

使用任务,并将其存储在会话状态字典中

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();
}

请注意,如果您不使用进程内会话状态,则此状态将不起作用。

谢谢@Tyson,任务是每个会话。。longRunningTask变量的作用域是什么?谢谢@Tyson。我现在正在TempData中存储数据,它可以正常工作。