我必须编写一个由四个线程组成的应用程序:
- 线程生成一些数据(生产者线程);
- 线程从生产者线程获取数据并执行
Action1(data);
- 线程从生产者线程获取数据并执行
Action2(data);
- 线程从生产者线程获取数据并执行
Action3(data);
如何将相同的数据传递给所有三个消费线程?我仅限于 .NET 3.0 库,即不能使用 ConcurrentQueues 之类的东西。
我必须编写一个由四个线程组成的应用程序:
Action1(data);
Action2(data);
Action3(data);
如何将相同的数据传递给所有三个消费线程?我仅限于 .NET 3.0 库,即不能使用 ConcurrentQueues 之类的东西。
一种选择是简单地让您的生产者在它产生数据时触发一个事件,允许您拥有任意数量的不同消费者订阅该事件并在线程池线程中根据该数据将要完成的工作排入队列。
public class Producer
{
public event Action<Data> DataProduced;
public void Produce()
{
while (true)
{
Thread.Sleep(1000);//placeholder for real work
DataProduced(new Data());//populate with real data
}
}
}
Producer producer = new Producer();
producer.DataProduced += data =>
ThreadPool.QueueUserWorkItem(_ => Consume1(data));
producer.DataProduced += data =>
ThreadPool.QueueUserWorkItem(_ => Consume2(data));
producer.DataProduced += data =>
ThreadPool.QueueUserWorkItem(_ => Consume3(data));
producer.Produce();