20

C#4.5の非同期実装は、スレッドの使用方法がF#2とまったく同じですか?

4

1 に答える 1

28

彼らは違う。主な違いは、C#は標準の.NETTask<T>を使用して非同期計算を表すのに対し、F#は。と呼ばれる独自の型を使用することAsync<T>です。

具体的には、主な違いは次のとおりです。

  • AC#非同期メソッドTask<T>はすぐに開始されるaを作成し(ホットタスクモデル)、F#は明示的に開始する必要のある計算を作成します(ジェネレーターモデル)。これは、F#計算の作成が簡単であることを意味します(より高いレベルの抽象化を記述できます)。

  • F#では、計算の開始方法をより適切に制御することもできます。を使用して計算をAsync.Start開始し、バックグラウンドでAsync.StartImmediate開始するか、現在のスレッドで開始することができます。

  • F#非同期ワークフローは自動的にキャンセルをサポートするため、渡す必要はありませんCancellationToken

  • おそらく、最初のポイントのもう1つの結果は、F#非同期ワークフローも末尾再帰をサポートしているため、再帰的なワークフローを記述できることです(これは、C#では簡単に機能しませんが、C#はこのプログラミングスタイルを使用しません)

このトピックについてより詳細な記事を書きました:非同期C#とF#(II。):それらはどのように異なりますか?

于 2012-10-03T12:54:01.270 に答える