异步流 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相关推荐

  1. # 22.Flink-高级特性-新特性-异步IO\原理

    22.Flink-高级特性-新特性-异步IO-了解 22.1.原理 22.1.1.异步IO操作的需求 https://nightlies.apache.org/flink/flink-docs-rel ...

  2. Java8新特性Stream流详解

    陈老老老板 说明:新的专栏,本专栏专门讲Java8新特性,把平时遇到的问题与Java8的写法进行总结,需要注意的地方都标红了,一起加油. 本文是介绍Java8新特性Stream流常用方法超详细教学 说 ...

  3. java8新特性stream流

    参考自深蓝至尊的Java8 新特性之流式数据处理 一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式 ...

  4. java的collect用法_java8新特性:stream流中collect用法

    java8新特性:stream流中collect用法 java8新特性:stream流中collect用法 1.toList List collectList = Stream.of(1, 2, 3, ...

  5. 23-Flink-高级特性-新特性-异步IO-了解

    Flink-高级特性-新特性-异步IO-了解 原理 API https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/strea ...

  6. Java复习第11天---11.4---Java8新特性---Stream流常用方法3和综合案例

    Java复习第11天---11.4---Java8新特性---Stream流常用方法3和综合案例 目录 文章目录 1.count:计数-终结方法 2.limit:取前几个元素-延迟方法 3.skip: ...

  7. Java复习第11天---11.3---Java8新特性---Stream流特点和常用方法2

    Java复习第11天---11.3---Java8新特性---Stream流特点和常用方法2 目录 文章目录 1.Stream流特点 2.filter:过滤 3.map:映射 ***后记*** : 内 ...

  8. Java复习第11天---11.2---Java8新特性---Stream流获取方式和常用方法1

    Java复习第11天---11.2---Java8新特性---Stream流获取方式和常用方法1 目录 文章目录 1.Stream流的2中获取方式 1.1.集合的stream方法 1.2.Stream ...

  9. Java8新特性——Stream流:不同于IO流的流,操作集合数据

    文章目录 Stream流 1.认识Stream流(源码说明) 1.1.Stream流和Collection的区别 1.2.流的获取方式 1.3.流操作和管道 1.4.并行性 1.5.不干扰内政 1.6 ...

最新文章

  1. python棋盘放米循环结构_Python递归法计算棋盘上所有路径总奖品最大值(京东2016编程题)...
  2. 【Qt中文手册】QObject
  3. php 连续点击事件,javascript设置连续两次点击按钮时间间隔的方法_javascript技巧...
  4. python基础之----函数
  5. [转]Muilti-touch 双指缩放的实现探索
  6. mysql 多数据库事务_多数据库事务处理
  7. cocos2dx中关于Action动作的相关API的具体介绍
  8. 分享几个个人经常用到的js方法
  9. MySQL中IN子查询会导致无法使用索引
  10. 幸运福彩3d 是什么
  11. mp3转html,使用javascript将wav转换为mp3
  12. 桑拿锁技术升级:桑拿手牌复制休矣!
  13. c语言计算二元一次不定方程,二元一次不定方程的解
  14. oracle中分号和双引号用法,深入理解oracle中单引号与双引号的用法区别
  15. [Tips]Ubuntu20.04域名解析失败或网速很慢
  16. 【QT】将指定ip添加到凭据管理器
  17. Windows下安装VMware
  18. SRS Audio Sandbox没有声音怎么办
  19. python3数据处理(一)-- 解析XML,Excle文件
  20. 201771010101 白玛次仁

热门文章

  1. 《蛋白质女孩》的一句台词
  2. 如何在Windows 10上设置默认Linux发行版
  3. 浮点型数据的输出格式
  4. [Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例二.
  5. phpstrom 编辑器设置
  6. Nginx server之Nginx作为反向代理服务器
  7. 开发们 点广告-赚点BT币
  8. Exchange2003-2010迁移系列之九,创建DAG组
  9. windows下的NTP服务
  10. SQLServer支持大内存方案(转载)