[英]Async and Await - Will control return immediately from an MVC action method?
[英]Will BeginInvoke continue to execute if I return immediately from an MVC controller action?
我正在尝试解决一个问题,我们认为在某些情况下可能不会执行异步调用。
delegate void TestDelegate();
void doWork()
{
Thread.Sleep(5000);
}
public ActionResult Test()
{
var myAsyncCall = new TestDelegate(doWork);
myAsyncCall.BeginInvoke();
return View();
}
通常,您需要在委托上调用EndInvoke
。 这将使您确定为什么事情不起作用(例如doWork
中引发的异常,这将解释所描述的问题)。
有关详细信息,请参阅在MSDN上异步调用同步方法 。
话虽这么说,我建议将其改写为使用TPL而不是delegate.BeginInvoke
,因为这会使整体检查变得更简单。 您可以将以上内容写为:
public ActionResult Test()
{
// Start the async work, and attach a continuation which happens if exceptions occur
Task.Run(() => doWork())
.ContinueWith(t =>
{
var ex = t.Exception.InnerException;
LogException(ex);
}, TaskContinuationOptions.OnlyOnFaulted);
return View();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.