2

CCR について読んだ後: http://www.infoq.com/news/2008/12/CCR F# 非同期ブロックとほとんど同じように動作するという印象を受けました。

「let!」と同じことをするために、port.Receive と port.Test を生成します。

これは正しいです?CCR には、F# 非同期では得られない利点がありますか?

4

1 に答える 1

4

あなたが言及した記事の例は、let!非同期ワークフローのように見えます。一般に、yield returnC# のキーワードを使用すると、F# の計算式に似たパターンをエンコードできます (列挙子を作成するために設計されているため、奇妙な方法です)。

  • これはAsyncEnumeratorでも使用されます。これは (IMHO) CCR より単純で、F# 非同期ワークフローに少し近いです。
  • この類似性をより詳細に説明する記事を書きました。

CCR と F# の非同期ワークフローの主な違いは、CCR にはメッセージ パッシングの同時実行のためのライブラリも含まれていることだと思います。たとえば、この記事を参照してください-Portクラス (ポートにメッセージを送信できます) とArbiter.Receiveからのメッセージを待機できるプリミティブである を使用しますPort

MailboxProcessorF# では、同じメッセージ パッシング通信パターンの実装に使用できますが、これは F# 非同期ワークフローの組み込み部分ではなく、非同期ワークフローを使用してMailboxProcessor実装されます。

要約すると、F# 非同期ワークフローはより単純で、概念的にも明確であると思います。ただし、CCR と非同期ワークフローは、ほぼ同じプログラミング パターンを一緒に実装します。MailboxProcessor

于 2010-05-07T15:59:53.307 に答える