在 asp.net mvc 2 Controller 中,我有以下代码:
using (BackgroundWorker worker = new BackgroundWorker())
{
worker.DoWork += new DoWorkEventHandler(blah);
worker.RunWorkerAsync(var);
}
我的问题是:这段代码是异步的,这意味着它启动一个新线程并且 Controller 在“blah”并行执行时返回 View ?
如果没有,我将如何实现这些结果?
最佳答案
在 MVC 2 中有一个称为 AsyncController 的新功能,它是在 MVC 中执行异步调用的正确方法。您的 Controller 应该继承自 AsyncController 而不是 Controller 。那么你的主要操作方法名称应该在末尾有“Async”。例如,如果您有一个名为 Blah() 的操作方法,则改为在 BlahAsync() 中命名,这将被框架自动识别(并使用 BlahCompleted() 进行回调):
public virtual void BlahAsync()
{
AsyncManager.OutstandingOperations.Increment();
var service = new SomeWebService();
service.GetBlahCompleted += (sender, e) =>
{
AsyncManager.Parameters["blahs"] = e.Result;
AsyncManager.OutstandingOperations.Decrement();
};
service.GetBlahAsync();
}
public virtual ActionResult BlahCompleted(Blah[] blahs)
{
this.ViewData.Model = blahs;
return this.View();
}
这里有更多关于 AsyncController 的信息:MVC AsyncController
关于c# - 是 Controller 异步中的后台 worker 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3561610/