TaskCompletionSource
非同期/スレッドレス作業の目的とその関係を理解しようとしています。私は一般的な考えを持っていると思いますが、私の理解が正しいことを確認したいと思います。
私は最初にタスク並列ライブラリ(TPL)を調べて、独自のスレッドレス/非同期作業(ASP.NETサイトのスケーラビリティを向上させようとしているなど)とTPLの理解を作成する良い方法があるかどうかを調べ始めました。将来的には非常に重要になるようです(async
/ await
)。それは私をに導きましたTaskCompletionSource
。
私の理解でTaskCompletionSource
は、クラスの1つに追加しても、コーディングを非同期にするほどの効果はないようです。まだ同期コードを実行している場合は、コードの呼び出しがブロックされます。これはMicrosoftAPIにも当てはまると思います。たとえば、クラスDownloadStringTaskAsync
外ではWebClient
、最初に実行しているセットアップ/同期コードはすべてブロックされます。実行しているコードは、現在のスレッドのいずれかのスレッドで実行する必要があります。そうでない場合は、新しいスレッドをスピンオフする必要があります。
したがって、MicrosoftからTaskCompletionSource
他の呼び出しを呼び出すときに独自のコードで使用するasync
ため、クラスのクライアントは、クラスがブロックしないように新しいスレッドを作成する必要がありません。
Microsoftが非同期APIを内部でどのように実行しているかわからない。たとえば、for.Net4.5async
には新しい方法があります。SqlDataReader
IO完了ポートがあることは知っています。おそらくほとんどのC#開発者が使用しないのは低レベルの抽象化(C ++?)だと思います。IO完了ポートがデータベースまたはネットワーク呼び出し(HTTP)で機能するのか、それともファイルIOでのみ使用されるのかわからない。
だから問題は、私の理解では正しいのかということです。私が間違って表現した特定のものはありますか?