在阅读了关于CCR:http://www.infoq.com/news/2008/12/CCR的文章后,我得到的印象是它与F#异步块几乎完全相同?
为了完成与"let!“相同的操作,您需要生成port.Receive和port.Test。
这是正确的吗?在CCR中有没有F# async无法获得的好处?
发布于 2010-05-07 23:59:53
您在文章中提到的示例看起来真的很像异步工作流中的let!。通常,C#中的yield return关键字可以对类似于F#计算表达式的模式进行编码(以一种奇怪的方式,因为它是为创建枚举数而设计的):
我认为CCR和F#异步工作流之间的关键区别在于CCR还包括用于消息传递并发的库。例如参见this article -它使用Port类(您可以将消息发送到端口)和Arbiter.Receive,这是一个允许您等待来自Port的消息的原语。
在F#中,您可以使用MailboxProcessor实现相同的消息传递通信模式,但这不是F#异步工作流的内置部分- MailboxProcessor是使用异步工作流实现的。
总结:我认为F#异步工作流更简单,概念更清晰。但是,CCR和异步工作流以及MailboxProcessor实现了大致相同的编程模式。
https://stackoverflow.com/questions/2789717
复制相似问题