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