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相关推荐
- # 22.Flink-高级特性-新特性-异步IO\原理
22.Flink-高级特性-新特性-异步IO-了解 22.1.原理 22.1.1.异步IO操作的需求 https://nightlies.apache.org/flink/flink-docs-rel ...
- Java8新特性Stream流详解
陈老老老板 说明:新的专栏,本专栏专门讲Java8新特性,把平时遇到的问题与Java8的写法进行总结,需要注意的地方都标红了,一起加油. 本文是介绍Java8新特性Stream流常用方法超详细教学 说 ...
- java8新特性stream流
参考自深蓝至尊的Java8 新特性之流式数据处理 一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式 ...
- java的collect用法_java8新特性:stream流中collect用法
java8新特性:stream流中collect用法 java8新特性:stream流中collect用法 1.toList List collectList = Stream.of(1, 2, 3, ...
- 23-Flink-高级特性-新特性-异步IO-了解
Flink-高级特性-新特性-异步IO-了解 原理 API https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/strea ...
- Java复习第11天---11.4---Java8新特性---Stream流常用方法3和综合案例
Java复习第11天---11.4---Java8新特性---Stream流常用方法3和综合案例 目录 文章目录 1.count:计数-终结方法 2.limit:取前几个元素-延迟方法 3.skip: ...
- Java复习第11天---11.3---Java8新特性---Stream流特点和常用方法2
Java复习第11天---11.3---Java8新特性---Stream流特点和常用方法2 目录 文章目录 1.Stream流特点 2.filter:过滤 3.map:映射 ***后记*** : 内 ...
- Java复习第11天---11.2---Java8新特性---Stream流获取方式和常用方法1
Java复习第11天---11.2---Java8新特性---Stream流获取方式和常用方法1 目录 文章目录 1.Stream流的2中获取方式 1.1.集合的stream方法 1.2.Stream ...
- Java8新特性——Stream流:不同于IO流的流,操作集合数据
文章目录 Stream流 1.认识Stream流(源码说明) 1.1.Stream流和Collection的区别 1.2.流的获取方式 1.3.流操作和管道 1.4.并行性 1.5.不干扰内政 1.6 ...
最新文章
- python棋盘放米循环结构_Python递归法计算棋盘上所有路径总奖品最大值(京东2016编程题)...
- 【Qt中文手册】QObject
- php 连续点击事件,javascript设置连续两次点击按钮时间间隔的方法_javascript技巧...
- python基础之----函数
- [转]Muilti-touch 双指缩放的实现探索
- mysql 多数据库事务_多数据库事务处理
- cocos2dx中关于Action动作的相关API的具体介绍
- 分享几个个人经常用到的js方法
- MySQL中IN子查询会导致无法使用索引
- 幸运福彩3d 是什么
- mp3转html,使用javascript将wav转换为mp3
- 桑拿锁技术升级:桑拿手牌复制休矣!
- c语言计算二元一次不定方程,二元一次不定方程的解
- oracle中分号和双引号用法,深入理解oracle中单引号与双引号的用法区别
- [Tips]Ubuntu20.04域名解析失败或网速很慢
- 【QT】将指定ip添加到凭据管理器
- Windows下安装VMware
- SRS Audio Sandbox没有声音怎么办
- python3数据处理(一)-- 解析XML,Excle文件
- 201771010101 白玛次仁