C# 8 新特性 - 异步流 Asynchronous Streams
異步流 Asynchronous Streams
例子?
這是一個很簡單的控制臺程序。它有一個NumberFactory,它可以根據傳遞的參數來產生一串數字(IEnumerable<int>)。然后在這個程序中把每個數字都打印出來,同時在前邊顯示出當前的線程ID。?
?
這里面的NumberFactory也是非常的簡單:?
這里我做了延遲,模擬讀取外部資源的效果。?
?
運行程序(文章考不到挨個輸出的停頓效果):?
?
可以看到所在線程的ID都是1。因為其工作原理就是這樣的,程序會阻塞線程以便讓NumberFactory來做它的工作。所以說這樣不是很理想,最理想的辦法是使用C#的異步編程模型,但是在C#?8之前,這是做不到的。但是從C# 8開始,我們就可以這樣做了。?
?
Asynchronous?Streams?異步流?
首先修改NumberFactory,在Task.Delay(1000)前邊加上await關鍵字來代替.Wait()方法,然后再修改返回類型為IAsyncEnumberable<int>,并在前面添加async關鍵字:?
?
回到Main方法,需要做出兩個修改:?
首先,就是在foreach循環前面加上await關鍵字,這看起來比較奇怪,但這就是我們遍歷異步流的方式。注意是在foreach前邊加await,而不是在factory.GenerateNumbers(5)前邊加await。?
然后,還需要改變Main方法的返回類型為Task,并加上async關鍵字。?
?
最后運行程序,看看效果:?
可以看到,線程的ID有時候會發生變化,這就是我們想要的效果。在這里流是異步的,當它await任務的時候,該線程是可以去做其它工作的。而當程序繼續執行的時候,它確實可能結束于其它的線程。?
更詳細教程請點擊原文鏈接。
總結
以上是生活随笔為你收集整理的C# 8 新特性 - 异步流 Asynchronous Streams的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SiteServer CMS 新版本 V
- 下一篇: 互联网50周年!这有它的一张“出生证明”