第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

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

3 回答

?
一只名叫tom的貓

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊

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


  MyAsyncMethod().

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

        TaskContinuationOptions.OnlyOnFaulted);

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


更新:

從技術(shù)上講,您可以執(zhí)行以下操作await:


try

{

    await MyAsyncMethod().ConfigureAwait(false);

}

catch (Exception ex)

{

    Trace.WriteLine(ex);

}

...如果您需要專門使用try/ catch(或using),這將很有用,但我發(fā)現(xiàn)它ContinueWith要明確一些,因?yàn)槟仨氈朗裁碈onfigureAwait(false)意思。


查看完整回答
反對 回復(fù) 2019-10-05
  • 3 回答
  • 0 關(guān)注
  • 1657 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號