2

在阅读了关于 CCR 的内容后:http: //www.infoq.com/news/2008/12/CCR 我得到的印象是它与 F# 异步块几乎完全相同?

您产生 port.Receive 和 port.Test 以执行与“let!”相同的操作。

它是否正确?CCR 中是否有任何 F# async 没有的好处?

4

1 回答 1

4

您提到的文章中的示例看起来就像let!来自异步工作流。通常,yield returnC# 中的关键字可以对类似于 F# 计算表达式的模式进行编码(以一种奇怪的方式,因为它是为创建枚举器而设计的):

  • 这也被AsyncEnumerator使用,它(恕我直言)比 CCR 更简单,并且更接近 F# 异步工作流
  • 我写了一篇文章,更详细地解释了这种相似性。

我认为 CCR 和 F# 异步工作流之间的主要区别在于 CCR 还包括用于消息传递并发的库。参见例如这篇文章- 它使用Port类(您可以向端口发送消息)和Arbiter.Receive,这是一个允许您等待来自 的消息的原语Port

在 F# 中,您可以MailboxProcessor用于实现相同的消息传递通信模式,但这不是 F# 异步工作流的内置部分 -MailboxProcessor使用异步工作流实现的。

总结:我认为 F# 异步工作流更简单,概念上更清晰。但是,CCR 和异步工作流一起实现了MailboxProcessor大致相同的编程模式。

于 2010-05-07T15:59:53.307 回答