0

我刚刚了解了 .NET 中的队列,我有几个问题。

假设我正在构建一个应用程序来下载页面的 HTML,然后对其进行处理。这是我希望它的操作方式:

  1. 主线程将 URL 添加到队列
  2. 该队列由另外两个线程读取。他们“出列”一个 URL,然后下载相应的 HTML。
  3. 然后将 HTML 发送回主线程。
  4. 当 HTML 到达主线程时,它被放入另一个队列,由另外两个线程处理。这些线程处理 HTML。
  5. 处理结果返回到主线程。

如何在没有竞争条件的情况下实现这样的场景?

另外,如上所述在队列和线程之间传递信息的最佳方式是什么?

你能给我一些示例代码吗?

谢谢!

4

2 回答 2

1

我推荐BlockingCollection<T>。它代表多线程中常见的“生产者/消费者队列”。

于 2010-06-25T01:51:41.427 回答
0

有两种方法浮现在脑海。

第一种是使用实现锁定的集合来产生线程安全的一致性(例如其他地方提到的 BlockingCollection)。

第二种是使用不可变集合(例如 Eric Lippart 在http://blogs.msdn.com/b/ericlippert/archive/2007/11/13/immutability-in-c-part-one- kind-of-immutability.aspx),它首先避免了线程锁定和竞争条件的大部分麻烦,并且通常使遗留下来的东西更加明显。

于 2010-06-25T02:05:05.500 回答