0

.NET のキューについて学習したばかりで、いくつか質問があります。

ページの HTML をダウンロードして処理するアプリケーションを構築しているとしましょう。操作方法は次のとおりです。

  1. メイン スレッドが URL をキューに追加する
  2. このキューは、他の 2 つのスレッドによって読み取られます。URL を「デキュー」し、対応する HTML をダウンロードします。
  3. 次に、HTML がメイン スレッドに送り返されます。
  4. HTML がメイン スレッドに到着すると、別のキューに配置され、別の 2 つのスレッドによって処理されます。これらのスレッドは HTML を処理します。
  5. 処理の結果はメインスレッドに返されます。

競合状態の可能性なしにそのようなシナリオを実装するにはどうすればよいですか?

また、上記のようにキューとスレッド間で情報を渡す最良の方法は何ですか?

サンプルコードを教えてください。

ありがとう!

4

2 に答える 2

1

私はお勧めしBlockingCollection<T>ます。これは、マルチスレッドで一般的な「プロデューサー/コンシューマー キュー」を表します。

于 2010-06-25T01:51:41.427 に答える
0

思いつく方法は2つあります。

1 つ目は、ロックを実装してスレッド セーフな一貫性を実現するコレクションを使用することです (他の場所で説明した BlockingCollection など)。

2 つ目は、不変のコレクション ( http://blogs.msdn.com/b/ericlippert/archive/2007/11/13/immutability-in-c-part-one-で Eric Lippart によって説明されているものなど) を使用することです。kind-of-immutability.aspx ) を使用すると、そもそもスレッド ロックと競合状態の煩わしさのほとんどを回避し、通常、これまでに残ったものをもう少し明白にできます。

于 2010-06-25T02:05:05.500 に答える