2014-04-28 39 views
4

我必须在Global.asax的Application_PostAcquireRequestState方法中调用一些异步方法(这些方法来自库并且没有用于这些操作的等效同步方法)。在继续我的页面处理之前,我想确保完成此异步代码,因为一些安全参数是使用该异步调用的结果设置的。Global.asax中的异步方法

如何在不造成死锁的情况下正常工作?

感谢

+0

这能否帮助? http://stackoverflow.com/questions/5095183/how-would-i-run-an-async-taskt-method-synchronously – naveen

回答

6

只需拨打该*Async()方法返回,例如TaskResult财产。

var result = BarAsync().Result; 

如果方法返回Task而非Task<T>,使用Wait()

BarAsync().Wait(); 
+0

它的工作原理,但我有点困惑:为什么它在global.asax工作,而不是在页面后面的代码(死锁)? –

+0

@ mberube.Net这个问题可能会启发你:http://stackoverflow.com/questions/12304691/why-are-iis-threads-so-precious-as-compared-to-regular-clr-threads –

+0

供参考:我应该提到这不适用于构造函数!它可以是如此的越野车!就像事实一样。 – OmG