C#4.5の非同期実装は、スレッドの使用方法がF#2とまったく同じですか?
1 に答える
彼らは違う。主な違いは、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。):それらはどのように異なりますか?