我必须编写一个由四个线程组成的应用程序:
Action1(data);
Action2(data);
Action3(data);
如何将相同的数据传递给所有三个消费线程?我只限于.NET 3.0库,即我不能使用ConcurrentQueues等等。
答案 0 :(得分:3)
一种选择是让生产者在生成数据时触发事件,允许您拥有任意数量的订阅事件的不同使用者,并根据线程池线程中的数据将工作排入队列。
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();