[asp.net-mvc]将 begininvoke 的原始继续执行如果我立即返回从 MVC 控制器操作吗?

发布时间: 2016/10/7 6:32:47
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图解决的问题,我们相信在某些情况下可能不会执行异步调用。

  • DoWork()将完成执行即使在控制器已返回后并没有对EndInoke()的调用?
  • 还有另一种情况,在那里将不执行该方法,像在doWork()异常抛出吗?
delegate void TestDelegate();
void doWork()
{
    Thread.Sleep(5000);
}
public ActionResult Test()
{
    var myAsyncCall = new TestDelegate(doWork);
    myAsyncCall.BeginInvoke();
    return View();
}

解决方法 1:

一般情况下,您需要调用 EndInvoke 的委托。 这将允许您确定为什么事情不工作 (喜欢内引发异常 doWork ,这可以解释描述的问题)。

有关详细信息,请参阅异步方式调用同步方法MSDN 上。

说,我会推荐的返工此项可使用第三方物流的而不是 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();
}
官方微信
官方QQ群
31647020