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

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

運行沒有等待的任務(wù)方法

運行沒有等待的任務(wù)方法

C#
一只萌萌小番薯 2022-01-16 16:17:11
假設(shè)我有以下方法:public async Task<bool> DoSomeStuffWithAsync(){   //do some stuff without calling await   return true;}我這樣稱呼它:await DoSomeStuffWithAsync(); 這與此方法的運行是否有任何不同:public bool DoSomeStuff(){   return true;}被這樣稱呼:DoSomeStuff();我在想,因為DoSomeStuffWithAsync實際上并沒有調(diào)用await它的代碼,所以它仍然會像DoSomeStuff.構(gòu)建我的方法有什么好處 DoSomeStuffWithAsync嗎?
查看完整描述

3 回答

?
偶然的你

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

請注意,使用async不使用的方法await被認為是不好的樣式。如果你有一個返回任務(wù)的同步方法,你應該使用Task.FromResult:


public Task<bool> DoSomeStuffWithAsync()

{

   return Task.FromResult(true);

}

但是,是的,僅此而已:返回任務(wù)的同步方法。它沒有異步,所以它實際上與只返回一個布爾值的普通同步代碼沒有任何不同。


直接返回任務(wù)而不是返回值還有好處嗎?那要看。有時,您可能需要實現(xiàn)一個異步接口,但實際上并沒有異步實現(xiàn)它。但是,如果您不必這樣做,并且您也不考慮最終更改您的實現(xiàn)以實際異步執(zhí)行某些操作,那么讓您的方法返回任務(wù)沒有任何好處。


至于調(diào)用,await DoSomeStuffWithAsync()將運行DoSomeStuffWithAsync()然后等待它返回的任務(wù)。既然DoSomeStuffWithAsync()是同步的,任務(wù)會直接返回,既然任務(wù)已經(jīng)完成,await就可以直接繼續(xù)。所以這與同步調(diào)用方法非常相似。但是,它的存在await確實會對運行時行為產(chǎn)生影響,因為這將使調(diào)用方法實際上是異步的(即使被調(diào)用的代碼是同步的)。


但由您決定這是否適合您的情況。不過,一般來說,當不涉及真正的異步過程時,您可能應該避免讓它看起來是異步的。


查看完整回答
反對 回復 2022-01-16
?
一只斗牛犬

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

簡而言之,async關(guān)鍵字不會使方法異步運行。它只允許方法在await里面調(diào)用關(guān)鍵字。這就是魔法發(fā)生的地方。在您的情況下,您在任何地方都沒有任何await關(guān)鍵字表明您的方法確實沒有異步運行。


查看完整回答
反對 回復 2022-01-16
?
夢里花落0921

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

你的方法返回不同的東西。DoSomeStuffWithAsync() 返回一個Task<bool>. 您可以在沒有“async”關(guān)鍵字的情況下調(diào)用它 - 同步 - 編譯器將在方法完成后返回包裝在實例中的Task<bool>bool - 它在幕后執(zhí)行此操作。另一個“區(qū)別”是您如何處理返回的值。 .


var task = DoSomeStuffWithAsync(); // Synchronous call

Console.WriteLine(task.Result); // You must unpack the bool result...

您的其他方法只返回一個布爾值 - 它只是一個標準的同步調(diào)用/返回......


var result = DoSomeStuff(); // Synchronous call

Console.WriteLine(result);  // Just use the result

從行為的角度來看,要回答您的具體問題,兩者的行為都是同步的。另一種看待它的方式:


var act = new Func<Task<bool>>(async () => await DoSomeStuffWithAsync()); 

var result = act(); // will complete when DoSomeStuffWithAsync completes

希望這能回答你的問題。


查看完整回答
反對 回復 2022-01-16
  • 3 回答
  • 0 關(guān)注
  • 214 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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