在阅读了关于 CCR 的内容后:http: //www.infoq.com/news/2008/12/CCR 我得到的印象是它与 F# 异步块几乎完全相同?
您产生 port.Receive 和 port.Test 以执行与“let!”相同的操作。
它是否正确?CCR 中是否有任何 F# async 没有的好处?
在阅读了关于 CCR 的内容后:http: //www.infoq.com/news/2008/12/CCR 我得到的印象是它与 F# 异步块几乎完全相同?
您产生 port.Receive 和 port.Test 以执行与“let!”相同的操作。
它是否正确?CCR 中是否有任何 F# async 没有的好处?
您提到的文章中的示例看起来就像let!
来自异步工作流。通常,yield return
C# 中的关键字可以对类似于 F# 计算表达式的模式进行编码(以一种奇怪的方式,因为它是为创建枚举器而设计的):
我认为 CCR 和 F# 异步工作流之间的主要区别在于 CCR 还包括用于消息传递并发的库。参见例如这篇文章- 它使用Port
类(您可以向端口发送消息)和Arbiter.Receive
,这是一个允许您等待来自 的消息的原语Port
。
在 F# 中,您可以MailboxProcessor
用于实现相同的消息传递通信模式,但这不是 F# 异步工作流的内置部分 -MailboxProcessor
是使用异步工作流实现的。
总结:我认为 F# 异步工作流更简单,概念上更清晰。但是,CCR 和异步工作流一起实现了MailboxProcessor
大致相同的编程模式。