我想找到我的項目之一的最佳實踐。這是一個典型的帶有UI的WPF應用程序,它顯示項目列表,並且有一個返回結果的數據服務。異步等待vs GetAwaiter()。GetResult()和回調
我們正在異步調用該服務,以便不阻止用戶界面。我們已經在我們面前的兩個選項:
使用異步等待關鍵字 這需要標記所有的按鈕的方法異步單擊所有服務層的方式(在客戶端類,使HTTP調用服務器)和其中的任何方法。這種方法能正常工作等,然後到處傳播異步的問題
使用awaiter和回調 在這種方法中,UI客戶端調用業務層和傳送回調到服務層,服務層包裝了HTTP調用服務器,並使用GetAwaiter()。GetResult(),當http調用完成時,調用UI客戶端傳遞的回調函數。在這種情況下,沒有方法必須標記爲異步,但不確定使用GetAwaiter()。GetAwaiter()。GetResult() );
我只是試圖找出這是一個更好的辦法,如果有一些問題有兩種方法,我應該知道的
我敢肯定,第二種方法偶爾會導致死鎖。我知道,因爲我在使用Windows Universal進行開發時遇到了類似的情況。 – Felype
也有例外的問題。我知道一個完整的異步實現,最後得到'AggregateException',但我不知道'GetAwaiter'方法中的異常會發生什麼。 – Eris
@Eris當您等待時,您不會收到'AggregateException'。你會得到內在的異常。 'GetResult'也是一樣。 – i3arnon