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中存储数据,它可以正常工作。