2010-10-05 77 views
5

我想从一个新的线程/异步运行ASP.NET MVC控制器操作中的一些代码。我不关心响应,我想开火并忘记,并在异步方法在后台运行时返回用户视图。我认为BackgroundWorker类适合这个?backgroundworker阻止MVC控制器动作

public ActionResult MyAction() 
{ 
    var backgroundWorker = new BackgroundWorker(); 
    backgroundWorker.DoWork += Foo; 
    backgroundWorker.RunWorkerAsync(); 

    return View("Thankyou"); 
} 

void Foo(object sender, DoWorkEventArgs e) 
{ 
    Thread.Sleep(10000); 
} 

为什么此代码在返回视图之前会导致延迟10秒?为什么视图没有立即返回?

更重要的是,我需要做些什么来完成这项工作?

感谢

回答

7

您可以直接开始新的线程:

public ActionResult MyAction() 
{ 
    var workingThread = new Thread(Foo); 
    workingThread.Start(); 

    return View("Thankyou"); 
} 

void Foo() 
{ 
    Thread.Sleep(10000); 
} 
+0

干杯,只是不知道为什么工作背景虽块? – 2010-10-07 09:32:49

+1

你可以看到BackgroundWorker的soucre代码来找出。 BackgroundWorker是WinForms组件,我认为在ASP.NET中使用它是不正确的。 – bniwredyc 2010-10-07 10:13:38

+3

而不是手动新增线程,您应该使用ThreadPool.QueueUserWorkItem – 2011-08-22 16:53:30