异步F#与CCR框架

时间:2010-05-07 15:30:40

标签: multithreading f# asynchronous ccr

阅读CCR之后:http://www.infoq.com/news/2008/12/CCR 我觉得它与F#异步块几乎完全相同?

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

这是对的吗? 在CCR中你有没有得到F#async的好处?

1 个答案:

答案 0 :(得分:4)

您提到的文章中的示例实际上与异步工作流程中的let!非常相似。通常,C#中的yield return关键字可以编码类似于F#计算表达式的模式(以一种奇怪的方式,因为它是为创建枚举器而设计的):

  • 这也是AsyncEnumerator使用的,它(CHO)比CCR更简单,更接近F#异步工作流程
  • 我写了an article,更详细地解释了这个类似的内容。

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

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

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