async/await
都追求(或基于)
future and promises constructs范式(方法).
你可以给出(*)最简单的C#代码示例来说明它们之间的区别吗?
(*)
是否可能没有I / O,互联网或数据库连接?
更新:
那么,如果这个问题似乎得到回答,我可以重新设计一下.
为什么会在使用本机.NET Iobservable/IObserver await/async时添加并启动.NET的Reactive(Rx)扩展?
什么是可能的例证,Rx将丢失什么,使得做同样更笨拙或更低效率没有Rx(即只接受本机.NET Iobservable / IObserver等待/异步方法)?
解决方法
Rx(并且通过代理IObserver< T> / IObservable< T>接口)是可观察序列的范例.正如同步方法可以返回单个值(int)一样,它也可以返回一个IEnumerable< int>有一个值.将其与异步世界进行比较,任务< int>可以返回一个单一的int值,IObservable< int>可以返回一个只有一个int值的序列.
所以如果你想返回一个值为Task< T>的值序列,你必须创建某种延续,或者返回一个数组的集合/数组/列表.任务< INT []取代.这将意味着您获得所有或非价值.
任务/任务< T>也是一种具体的类型,其中Rx使用接口来抽象实现.我发现这有助于单元测试. TaskCompletionSource< T>但是在使用任务进行测试时可以避免隐含并发.
最后,除了Rx处理值序列(而不是单个值)的主要区别之外,Rx还被设计为与LINQ一起工作,以提供查询和组合优势,这些优点似乎与序列非常好(或者像IEnumerable&或像运动中的IObservable< T>).
最终这些是不同的工具,用于稍微不同的工作.有一些重叠,所以你有时可以使用一个做其他的更好的.具体来说,我认为任务更好地组合异步工作的单元(做这个,然后这样做,然后这样做),其中Rx更好地组合在一起的事件序列(当这个事件发生时,这样做与数据从这个其他事件).