プロデューサタスクとコンシューマタスクを使用してファイルを操作するかなり基本的なアプリケーションがあります。ここの例に基づいていますhttp://msdn.microsoft.com/en-us/library/dd267312.aspxBlockingCollectionを使用してコンシューマタスクからプロデューサタスクを通知する
プログラムの基本は、Producerタスクがハードドライブ上のファイルを列挙し、ハッシュ値を計算し、その他いくつかのことを実行することです。プロデューサがファイルの処理を終了すると、ファイルを取り込み、コンシューマがそれを取得します。
コンシューマタスクは、リモートサーバーに接続し、ファイルのアップロードを試みる必要があります。しかし、コンシューマがリモートサーバに接続できないなどのエラーが発生した場合、プロデューサタスクに何をして終了して終了する必要があるかを知らせる必要があります。サーバーがダウンしたり、ダウンしたりすると、プロデューサーは何千ものファイルを循環し続ける必要はありません。
私は、BlockingCollectionオブジェクトで.CompleteAdding()を使用してProducerタスクからConsumerタスクを通知するサンプルをたくさん見てきましたが、消費者からProducerにシグナルを送信する方法については迷っています生産する。
私はあなたを正しく理解していれば、エラー条件を含む2番目のBlockingCollectionを作成し、次にその上でTryTakeを使用しますか? – forcedfx
はい。キューに入れられたアイテム全体をキューに戻します。生成される可能性のあるエラーデータを保持するために、いくつかの余分なデータメンバーを与えます。消費者から返送された場合は、ファイル仕様、ホスト名、消費者に最初に送ったものとエラーデータ(エラー番号/列挙型、テキストエラーメッセージなど)が含まれます。これにより、エラーを記録/表示したり、後でやり直したりすることができます(エラー情報をクリアし、再び消費者にキューイングさせます)。 –