亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在不等待的情況下安全地在C#中調用異步方法

如何在不等待的情況下安全地在C#中調用異步方法

C#
DIEA 2019-10-05 11:25:56
我有一個async不返回任何數據的方法:public async Task MyAsyncMethod(){    // do some stuff async, don't return any data}我從另一個返回一些數據的方法中調用此方法:public string GetStringData(){    MyAsyncMethod(); // this generates a warning and swallows exceptions    return "hello world";}在MyAsyncMethod()不等待的情況下進行調用會在Visual Studio中發出“ 因為未等待此調用,因此當前方法會在調用完成之前繼續運行 ”警告。在該警告的頁面上,它指出:僅當您確定不想等待異步調用完成并且被調用的方法不會引發任何異常時,才應考慮禁止顯示警告。我確定我不想等待通話結束。我不需要或沒有時間。但是通話可能會引發異常。我已經幾次遇到這個問題,并且我確定這是一個常見的問題,必須有一個通用的解決方案。如何安全地調用異步方法而不等待結果?更新:對于建議我只是等待結果的人,這是響應我們Web服務(ASP.NET Web API)上的Web請求的代碼。在UI上下文中等待將保持UI線程空閑,但是在Web請求調用中等待將等待Task完成,然后再響應請求,從而無故增加了響應時間。
查看完整描述

3 回答

?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

如果要“異步”獲取異常,則可以執行以下操作:


  MyAsyncMethod().

    ContinueWith(t => Console.WriteLine(t.Exception),

        TaskContinuationOptions.OnlyOnFaulted);

這將使您可以處理“主”線程以外的線程上的異常。這意味著您不必“等待” MyAsyncMethod()來自調用線程的調用MyAsyncMethod;但是,仍然允許您執行例外操作-但僅當發生例外時。


更新:

從技術上講,您可以執行以下操作await:


try

{

    await MyAsyncMethod().ConfigureAwait(false);

}

catch (Exception ex)

{

    Trace.WriteLine(ex);

}

...如果您需要專門使用try/ catch(或using),這將很有用,但我發現它ContinueWith要明確一些,因為您必須知道什么ConfigureAwait(false)意思。


查看完整回答
反對 回復 2019-10-05
  • 3 回答
  • 0 關注
  • 1659 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號