mvc3动作之间的线程同步

时间:2012-02-24 00:18:24

标签: 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 if thread t1 is completed or not, if not keep waiting.
        return View();
    }
    public void DoLengthyOperation()
    {
        Thread.Sleep(10000);
    }

我想做的是什么 1)在Home动作中启动长过程,因为该过程不会返回任何内容,因此没有等待等待 2)在我的“关于”操作中,我想检查过程是否已启动“主页”操作是否已完成,如果没有,则等待直至完成。
我已经尝试过静态实例,但这对同时请求没有帮助,
我也尝试了全局变量但是这并没有帮助,因为每个请求都获得了控制器的新副本。
我的最终目标是当用户查看索引页面时,我的漫长过程应该在后台完成,我的过程需要20秒 任何帮助将不胜感激,
谢谢

1 个答案:

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

请注意,如果您未使用进程内会话状态,则无效。