写点什么

C#的未来:异步序列

  • 2015-05-06
  • 本文字数:713 字

    阅读完需:约 2 分钟

C#中的 async/await 语法已经得到了开发者们的广泛接受,但现在开发者们提出了新的要求。他们希望能够通过一种类似于“yield return”的语法从异步函数中返回多个值。在关于 C# 7 的一条新的提议中,这一功能被称为“异步序列”。

这条提议的提出者希望能够使用以下两种模式:

  • IObservable,这是 Reactive Extensions(Rx)的基础,后来成为了.NET 4.0 中的一部分
  • IAsyncEnumerable,这是由 Interactive Extensions(IX)项目所引入的类型,也用于 Entity Framework 7 中。

定义生产者

HaloFour 写道:

从一个序列的生产者的角度来看,这两种模式的 yield return 行为将有一些细微的差别。IObservable可能会立即继续执行,而 IAsyncEnumerable会等到下一次调用 MoveNext() 方法时才会继续执行。

对于 push 模型来说,使用 Observable.Create 方法就足够了,这点已经基本为开发者所接受。而基于 IAsyncEnumerable的 pull 模型实现起来就要麻烦许多。因此,这种时刻某种异步版本的迭代函数以及“yield return”语句就能够大显身手了。

定义消费者

HaloFour 继续写道:

从消费者的角度来说,这两种模式的行为应当是相同的。Observable.ForEach 允许并发执行某些操作,而我认为允许 foreach 方法体运行多个并发线程的方式是非常不直观的(假设派发这些线程时没有使用 SynchronizationContext)。如果它的实现类似于 await 的工作方式,那么可以让某种中间代码(例如 SequenceAwaiter)处理从某个 IObservable获得结果缓冲的细节,或者使用某个扩展方法直接将其转型为 IAsyncEnumerable

关于这个语法还没有提供任何示例,但估计它看起来应该类似于这样:

await foreach (var item in AsyncSource)

查看英文原文: C# Futures: Asynchronous Sequences

2015-05-06 08:361833
用户头像

发布了 428 篇内容, 共 185.7 次阅读, 收获喜欢 39 次。

关注

评论

发布
暂无评论
发现更多内容

Ribbon源码分析之@LoadBalanced与LoadBalancerClient

急需上岸的小谢

9月月更

分享一套自己制作的Nestjs实战教程

pincman

node.js typescript nestjs

阿里顶配版 Spring 全家桶高级笔记+300道硬核面试题,跪着啃完了

钟奕礼

Java 编程 程序员 架构 java面试

Java工程师丨面试必会进程线程问答

陈橘又青

Java 面试 9月月更

开源IM项目OpenIM单聊及万人群压测报告

Geek_1ef48b

金融网络安全体系建设

阿泽🧸

9月月更 安全体系建设

2022-09-02:以下go语言代码输出什么?A:9;B:11;C:编译错误;D:不确定

福大大架构师每日一题

golang 福大大 选择题

中国智能网联汽车信息安全分析2022案例征集

易观分析

汽车 案例征集 智联网

一名中年码农转型成远程工作及远程全栈教学创业者的故事

pincman

node.js typescript react.js 远程工作 nestjs

上车上车,快速搞懂Redis 过期策略和内存淘汰策略

知识浅谈

redis 过期策略 9月月更

leetcode 21. Merge Two Sorted Lists 合并两个有序链表(简单)

okokabcd

LeetCode 数据结构与算法

Java进阶(二)文件读操作

No Silver Bullet

Java 9月月更 文件读操作

易观千帆 | 2022年7月宁波市手机银行应用活跃人数榜单

易观分析

手机银行 宁波

线上问题如何复盘

老张

线上故障 问题复盘

远程TS全栈学习+远程全职工作+远程高质量外包=3R教室

pincman

node.js typescript react.js 远程工作 nestjs

微服务为什么需要混沌工程

穿过生命散发芬芳

混沌工程 9月月更

【数独 2】候选数法解数独谜题-挖掘更深的信息-C++实现

清风莫追

9月月更

中小企业集成AI人工智能的窘境

felix

人工智能 中小企业 开放应用模型

高颜值!程序员专属浏览器

Jackpop

SpringCloud 配置中心(Nacos)的简单使用

nacos SpringCloud 配置中心 9月月更

二维容器进行图的DFS搜索和BFS搜索-C++STL模板

清风莫追

c++ 算法 9月日更 9月月更

为什么这么多品牌迫切想要改变Logo?

Jackpop

Java进阶(三)Java安全通信:HTTPS与SSL应用配置

No Silver Bullet

https SSL证书 9月月更

什么是 SAP Business Function

汪子熙

SAP abap Netweaver 业务流程驱动 9月月更

学 Go,最常用的技能是什么?打日志

梦想橡皮擦

Python 9月月更

【Web前端】怎样用记事本写一个简单的网页-html

清风莫追

9月月更

计网复习一,计算机网络原理概述

前端小刘不怕牛牛

计算机网络 计算机基础 HTTP 9月月更

iview提供的控件tree

zxhtom

9月月更

易观之星 | “2022年度用户推荐数字应用”投票通道开启

易观分析

易观

云原生(三十四) | Kubernetes篇之平台存储系统实战

Lansonli

云原生 9月月更

[教你做小游戏] 只用几行原生JS,写一个函数,播放音效、播放BGM、切换BGM

HullQin

CSS JavaScript html 前端 9月月更

C#的未来:异步序列_C#_Jonathan Allen_InfoQ精选文章