我必须在Application_Error处理程序中进行异步调用。所以我用async关键字定义了这个处理程序,但不会在异常上触发它。
protected async void Application_Error(object sender, EventArgs e)
{
...
await DoAsyncCall();
...
}
删除async关键字时会触发处理程序。
BTW,我已经厌倦了向Application_Start处理程序添加async关键字,它运行正常。
如何使Application_Error异步?或者如何在没有async关键字的情况下进行异步调用?
答案 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。
希望这可以帮助解决此问题的其他人。