我必须在Global.asax的Application_PostAcquireRequestState方法中调用一些异步方法(这些方法来自库并且没有用于这些操作的等效同步方法)。在继续我的页面处理之前,我想确保完成此异步代码,因为一些安全参数是使用该异步调用的结果设置的。Global.asax中的异步方法
如何在不造成死锁的情况下正常工作?
感谢
我必须在Global.asax的Application_PostAcquireRequestState方法中调用一些异步方法(这些方法来自库并且没有用于这些操作的等效同步方法)。在继续我的页面处理之前,我想确保完成此异步代码,因为一些安全参数是使用该异步调用的结果设置的。Global.asax中的异步方法
如何在不造成死锁的情况下正常工作?
感谢
只需拨打该*Async()
方法返回,例如Task
的Result
财产。
var result = BarAsync().Result;
如果方法返回Task
而非Task<T>
,使用Wait()
:
BarAsync().Wait();
它的工作原理,但我有点困惑:为什么它在global.asax工作,而不是在页面后面的代码(死锁)? –
@ mberube.Net这个问题可能会启发你:http://stackoverflow.com/questions/12304691/why-are-iis-threads-so-precious-as-compared-to-regular-clr-threads –
供参考:我应该提到这不适用于构造函数!它可以是如此的越野车!就像事实一样。 – OmG
这能否帮助? http://stackoverflow.com/questions/5095183/how-would-i-run-an-async-taskt-method-synchronously – naveen