使用前缀async时不会触发Application_Error处理程序

时间:2013-12-04 13:28:33

标签: c# asp.net .net asynchronous async-await

我必须在Application_Error处理程序中进行异步调用。所以我用async关键字定义了这个处理程序,但不会在异常上触发它。

    protected async void Application_Error(object sender, EventArgs e)
    {
        ...

        await DoAsyncCall();

        ...
    }

删除async关键字时会触发处理程序。

BTW,我已经厌倦了向Application_Start处理程序添加async关键字,它运行正常。

如何使Application_Error异步?或者如何在没有async关键字的情况下进行异步调用?

2 个答案:

答案 0 :(得分:1)

最后我找到了解决方案:

protected void Application_Error(object sender, EventArgs e)
{
    ...

    Task task = Task.Run(async () => await DoAsyncCall());

    task.Wait();

    ...
}

答案 1 :(得分:0)

您发布的解决方案使用Task.Run。我认为这意味着你将有一个线程等待异步任务运行,第二个线程执行任务。这可能意味着您最终使用了两个线程。

我有一个类似的问题但是通过使用Server.TransferRequest函数来启动新的异步请求来回答它。然后我在以下请求中完成了所有处理。通过TransferRequest的header参数传递所有数据,我有一个只使用一个线程的异步错误控制器。请参阅Asynchronous error controller in ASP.NET MVC

希望这可以帮助解决此问题的其他人。