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

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

生活随笔

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

C#

C# 8 新特性 - 异步流 Asynchronous Streams

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

異步流 Asynchronous Streams

例子?

這是一個(gè)很簡(jiǎn)單的控制臺(tái)程序。它有一個(gè)NumberFactory,它可以根據(jù)傳遞的參數(shù)來(lái)產(chǎn)生一串?dāng)?shù)字(IEnumerable<int>)。然后在這個(gè)程序中把每個(gè)數(shù)字都打印出來(lái),同時(shí)在前邊顯示出當(dāng)前的線程ID。?

?

這里面的NumberFactory也是非常的簡(jiǎn)單:?

這里我做了延遲,模擬讀取外部資源的效果。?

?

運(yùn)行程序(文章考不到挨個(gè)輸出的停頓效果):?

?

可以看到所在線程的ID都是1。因?yàn)槠涔ぷ髟砭褪沁@樣的,程序會(huì)阻塞線程以便讓NumberFactory來(lái)做它的工作。所以說(shuō)這樣不是很理想,最理想的辦法是使用C#的異步編程模型,但是在C#?8之前,這是做不到的。但是從C# 8開(kāi)始,我們就可以這樣做了。?

?

Asynchronous?Streams?異步流?

首先修改NumberFactory,在Task.Delay(1000)前邊加上await關(guān)鍵字來(lái)代替.Wait()方法,然后再修改返回類型為IAsyncEnumberable<int>,并在前面添加async關(guān)鍵字:?

?

回到Main方法,需要做出兩個(gè)修改:?

首先,就是在foreach循環(huán)前面加上await關(guān)鍵字,這看起來(lái)比較奇怪,但這就是我們遍歷異步流的方式。注意是在foreach前邊加await,而不是在factory.GenerateNumbers(5)前邊加await。?

然后,還需要改變Main方法的返回類型為T(mén)ask,并加上async關(guān)鍵字。?

?

最后運(yùn)行程序,看看效果:?

可以看到,線程的ID有時(shí)候會(huì)發(fā)生變化,這就是我們想要的效果。在這里流是異步的,當(dāng)它await任務(wù)的時(shí)候,該線程是可以去做其它工作的。而當(dāng)程序繼續(xù)執(zhí)行的時(shí)候,它確實(shí)可能結(jié)束于其它的線程。?

更詳細(xì)教程請(qǐng)點(diǎn)擊原文鏈接。

總結(jié)

以上是生活随笔為你收集整理的C# 8 新特性 - 异步流 Asynchronous Streams的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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