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

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

在C#中“回程等待”的目的是什么?

在C#中“回程等待”的目的是什么?

qq_笑_17 2019-06-06 15:23:59
在C#中“回程等待”的目的是什么?在那里嗎任何這樣編寫方法的場景:public async Task<SomeResult> DoSomethingAsync(){     // Some synchronous code might or might not be here... //     return await DoAnotherThingAsync();}而不是這樣:public Task<SomeResult> DoSomethingAsync(){     // Some synchronous code might or might not be here... //     return DoAnotherThingAsync();}會有意義嗎?為什么使用return await構(gòu)造可以直接返回的Task<T>從內(nèi)部DoAnotherThingAsync()召喚?我看到代碼return await在很多地方,我想我可能錯過了什么。但據(jù)我所知,在這種情況下不使用異步/等待關(guān)鍵字并直接返回任務(wù)在功能上是等價的。為什么要增加額外的開銷await層?
查看完整描述

3 回答

?
波斯汪

TA貢獻1811條經(jīng)驗 獲得超4個贊

有一個偷偷摸摸的案子return在正常的方法和return await在……里面async方法的行為不同:當與using(或更廣泛地說,任何return await在.try街區(qū))。

考慮這兩個版本的方法:

Task<SomeResult> DoSomethingAsync(){
    using (var foo = new Foo())
    {
        return foo.DoAnotherThingAsync();
    }}async Task<SomeResult> DoSomethingAsync(){
    using (var foo = new Foo())
    {
        return await foo.DoAnotherThingAsync();
    }}

第一種方法是Dispose()這個Foo對象的DoAnotherThingAsync()方法返回,這很可能在實際完成之前很久。這意味著第一個版本可能是錯誤的(因為Foo),而第二個版本將運行良好。


查看完整回答
反對 回復 2019-06-06
?
肥皂起泡泡

TA貢獻1829條經(jīng)驗 獲得超6個贊

如果你不需要async(即,您可以返回Task),那么不要使用async.

有些情況下return await是有用的,就像你有要執(zhí)行的異步操作:

var intermediate = await FirstAsync();return await SecondAwait(intermediate);

欲了解更多信息async性能,見StephenToub‘sMSDN文章視頻關(guān)于這個話題。

最新情況:我寫了一個博客帖子這就涉及到了更多的細節(jié)。


查看完整回答
反對 回復 2019-06-06
?
躍然一笑

TA貢獻1826條經(jīng)驗 獲得超6個贊

你想這么做的唯一原因是如果有別的await在前面的代碼中,或者在返回結(jié)果之前以某種方式操作結(jié)果。另一種可能發(fā)生這種情況的方式是通過try/catch這會改變異常的處理方式。如果您沒有這樣做,那么您是對的,沒有理由增加創(chuàng)建該方法的開銷async.


查看完整回答
反對 回復 2019-06-06
  • 3 回答
  • 0 關(guān)注
  • 531 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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