2014-12-03 112 views
7

我是做ASP.NET一些编码,当我遇到这个传来:在ASP.NET事件处理程序中使用async/await安全吗?

protected async void someButtonClickHandler(...) 
{ 
    if(await blah) 
     doSomething(); 
    else 
     doSomethingElse(); 
} 

this问题后,我得到了一个更好地了解如何async/await作品。但是后来我发现以上述方式使用async/await是安全的吗?
我的意思是在调用await blah后,调用者继续执行。这意味着它可能会在await blah完成之前将响应呈现给客户端。这是正确的吗?如果是这种情况,doSomething()/doSomethingElse()会发生什么情况。他们会被执行吗?如果它们被执行,用户是否会看到其更改的效果?
在我的情况下,这些方法更改显示给用户的一些数据,但我也想知道一般情况下会发生什么。

+0

这是用于网络窗体的吗? – 2014-12-03 22:33:17

+0

@JonathanAllen是的。 – atoMerz 2014-12-04 00:08:36

回答

13

是的,它是安全的,但不是真的推荐。 recommended way to do this is via RegisterAsyncTask。但是,ASP.NET(Web窗体)将正确处理async void事件处理程序。

当处理程序await s时,响应未呈现给客户端; await仅对ASP.NET运行时产生影响,而不影响客户端。 ASP.NET运行时知道事件处理程序尚未完成,因此它知道不发送响应。当事件处理程序完成时,ASP.NET运行时通过发送响应来响应。

我有一个MSDN article on async ASP.NET,您可能会发现有帮助。如果您对ASP.NET运行时如何知道async处理程序尚未完成感到好奇,我会在an earlier MSDN article中介绍该处理程序。

+1

您的第一个链接目前已损坏 – Fredou 2014-12-03 22:15:20

+1

@Fredou:链接正确;这是ASP.NET网站的问题。只要点击刷新,直到内容出现。 – 2014-12-03 22:19:49

相关问题