在ASP.NET事件处理程序中使用async / await是否安全?
当我遇到这个时,我在ASP.NET中做了一些编码:
protected async void someButtonClickHandler(...) { if(await blah) doSomething(); else doSomethingElse(); }
在提出这个问题之后,我对async
/ await
如何工作有了更好的理解。 但后来让我感到震惊的是,以上面显示的方式使用async
/ await
是否安全?
我的意思是在调用await blah
之后调用者继续执行。 这意味着它可能会在await blah
完成之前将响应呈现给客户端。 这是正确的吗? 如果是这种情况, doSomething()
/ doSomethingElse()
会发生什么。 他们会被处决吗? 如果它们被执行了,用户是否会看到其更改的效果?
在我的情况下,这些方法会更改显示给用户的一些数据,但我也想知道在一般情况下会发生什么。
是的,这是安全的,但不是真的推荐。 建议的方法是通过RegisterAsyncTask
。 但是,ASP.NET(Web窗体)将正确处理async void
事件处理程序。
当处理程序await
时,响应不会呈现给客户端; await
只产生ASP.NET运行时,而不是客户端。 ASP.NET运行时知道事件处理程序尚未完成,因此它知道不发送响应。 当事件处理程序完成时,ASP.NET运行时通过发送响应来响应。
我有关于异步ASP.NET的MSDN文章 ,您可能会发现它很有帮助。 如果您对ASP.NET运行时如何知道async
处理程序尚未完成感到好奇,我将在之前的MSDN文章中介绍它 。