2014-12-03 74 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

相關問題