VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > c#教程 >
  • C#教程之C# 8 - using声明 和 异步流(3)

这是一个很简单的控制台程序。它有一个NumberFactory,它可以根据传递的参数来产生一串数字(IEnumerable<int>)。然后在这个程序中把每个数字都打印出来,同时在前边显示出当前的线程ID。 

 

这里面的NumberFactory也是非常的简单: 

public class NumberFactory 
I reference 
public IEnumerable<int> GenerateNumbers(int count) 
for (int i = 
0; i < count; 
Task. Delay(1ØØØ) .Wait(); 
yield return i + 1;

这里我做了延迟,模拟读取外部资源的效果。 

 

运行程序(文章考不到挨个输出的停顿效果): 

Enumerating numbers.. . 
Received number: 1.

 

Enumerating numbers.. . 
Received number: 
Received number: 
Received number: 
Received number: 
Received number: 
4. 
All numbers received .

可以看到所在线程的ID都是1。因为其工作原理就是这样的,程序会阻塞线程以便让NumberFactory来做它的工作。所以说这样不是很理想,最理想的办法是使用C#的异步编程模型,但是在C# 8之前,这是做不到的。但是从C# 8开始,我们就可以这样做了。 

 

Asynchronous Stream异步流 

首先修改NumberFactory,在Task.Delay(1000)前边加上await关键字来代替.Wait()方法,然后再修改返回类型为IAsyncEnumberable<int>,并在前面添加async关键字: 

public async IAsyncEnumerable<int> GenerateNumbers(int count) 
for (int i = 
0; i < count; 
await Task.Delay(1ØØØ); 
yield return i + 1;

 

回到Main方法,需要做出两个修改: 

相关教程