C# 5 で導入されたこれらの新しいキーワードを少し試してみたいと思います。並行して作業を分散する方法に興味があります。私はより自然にスレッド プールでそれを行いますが、この新しい非同期パターンで同じことを行うことに興味がありました。
ここに私のおもちゃの例があります.n個のルートサイトからクロールし、リンクをさらにたどるクローラーを作成しています. このアプリを作成するための適切な同時実行パターンはありますか?
C# 5 で導入されたこれらの新しいキーワードを少し試してみたいと思います。並行して作業を分散する方法に興味があります。私はより自然にスレッド プールでそれを行いますが、この新しい非同期パターンで同じことを行うことに興味がありました。
ここに私のおもちゃの例があります.n個のルートサイトからクロールし、リンクをさらにたどるクローラーを作成しています. このアプリを作成するための適切な同時実行パターンはありますか?
使用するスレッド化テクノロジに関係なく、作業負荷を個々のワーカーに割り当てるマネージャーが必要です。マネージャーは、1 ~ N 個のワーカー プロセスを作成します。ワーカー プロセス内で、選択したターゲット スレッド化方法が実行されます。
これらの各ワーカーが準拠する必要があるインターフェイスを作成し、そのインターフェイス内で、URL を取得する開始メソッド、公開されてチェック可能なエラー条件、プロセスを停止する機能、およびプロセスを停止する機能を指定することをお勧めします。エラーがないと仮定して、作業が終了したときにデータを引き渡す方法。最後に、現在動作しているか、停止しているか、エラーで停止しているかに関する列挙型などのステータス。
次に、マネージャーは、ターゲット URL を渡し、作業ユニットを独自の内部キューに入れることで、各プロセスを簡単に作成できます。次に、マネージャーはキューを調べて、自分自身が完了したとマークされているアイテムを探し、データを GUI (?) に渡してエンド ユーザーに表示します。
では、この新しい async await パターンはどのように適合するのでしょうか? ワーカー クラス内で async await を使用して呼び出しを行い、必要に応じてデータを処理するだけです。クラスはインターフェースメソッドを介してマネージャーと通信するため、マネージャーは知る必要はありません。
async await パターンを開始するためのドキュメントを次に示します。
The Task-Based Async Await Pattern (ダウンロード ワード) by Stephen Toub