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