日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

C# 使用多个异步方法

發(fā)布時(shí)間:2023/12/4 C# 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 使用多个异步方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在一個(gè)異步方法中,可以調(diào)用一個(gè)或多個(gè)異步方法。如何編寫代碼,取決于一個(gè)異步方法的結(jié)果是否依靠于另一個(gè)異步方法。

01 按順序調(diào)用異步方法

使用 await 關(guān)鍵字可以調(diào)用每個(gè)異步方法。在有些情況下,如果一個(gè)異步方法依賴另一個(gè)異步方法的結(jié)果,await 關(guān)鍵字就非常有用。在這里,GreetingAsync 異步方法的第二次調(diào)用完全獨(dú)立于其第一次調(diào)用的結(jié)果。這樣,如果每個(gè)異步方法都不使用 await,那么整個(gè) MultipleAsyncMethods 異步方法將更快地返回結(jié)果,如下所示:

private async static void MultipleAsyncMethods() {string sl = await GreetingAsync("Stephanie"); string s2 = await GreetingAsync("Matthias");Console.WriteLine($"Finished both methods.{Environment.NewLine) " +$"Result 1: {s1}{Environment.NewLine} Result 2:{s2}"); }

02 使用組合器

如果異步方法不依賴于其他異步方法,則每個(gè)異步方法都不使用 await,而是把每個(gè)異步方法的返回結(jié)果賦值給 Task 變量,就會(huì)運(yùn)行得更快。GreetingAsync 方法返回 Task<string>。這些方法現(xiàn)在可以并行運(yùn)行了。組合器可以幫助實(shí)現(xiàn)這一點(diǎn)。一個(gè)組合器可以接受多個(gè)同一類型的參數(shù),并返回同一類型的值。多個(gè)同一類型的參數(shù)被組合成一個(gè)參數(shù)來(lái)傳遞。Task 組合器接受多個(gè) Task 對(duì)象作為參數(shù),并返回一個(gè) Task。

示例代碼調(diào)用 Task.WhenAll 組合器方法,它可以等待,直到兩個(gè)任務(wù)都完成:

private?async?static?void?MultipleAsyncMethodsWithCombinators1() {Task<string> tl?= GreetingAsync("Stephanie");Task<string> t2 = GreetingAsync("Matthias");?await?Task.WhenAll(t1, t2);Console.WriteLine($"Finished both methods.{Environment.NewLine) " +$"Result?1:{t1.Result}{Environment.NewLine}?Result?2:?{t2.Result}"); }

Task 類定義了 WhenAll 和 WhenAny 組合器。從 WhenAll 方法返回的 Task,是在所有傳入方法的任務(wù)都完成了才會(huì)返回 Task。從 WhenAny 方法返回的 Task,是在其中一個(gè)傳入方法的任務(wù)完成了就會(huì)返回 Task。

Task 類型的 WhenAll 方法定義了幾個(gè)重載版本。如果所有的任務(wù)返回相同的類型,那么該類型的數(shù)組可用于 await 返回的結(jié)果。GreetingAsync 方法返回一個(gè) Task<string>,等待返回的結(jié)果是一個(gè)字符串(string)形式。因此,Task.WhenAll 可用于返回一個(gè)字符串?dāng)?shù)組:

private?async?static?void?MultipleAsyncMethodsWithCombinators2() {Task<string>?t1?=?GreetingAsync("Stephanie");?Task<string> t2 = GreetingAsync("Matthias");?string[]?result = await?Task.WhenAll(t1,?t2);Console.WriteLine($"Finished both methods.{Environment.NewLine} " +$"Result?1:{result[0]}{Enviornment.NewLine}?Result?2:{result[1]}"); }

只有等待的所有任務(wù)都完成時(shí)某個(gè)任務(wù)才能繼續(xù),WhenAll 方法就有實(shí)際用途。當(dāng)調(diào)用任務(wù)在等待完成的任何任務(wù)都完成才能執(zhí)行操作時(shí),可以使用 WhenAny 方法。它可以使用任務(wù)的結(jié)果繼續(xù)。

總結(jié)

以上是生活随笔為你收集整理的C# 使用多个异步方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。