这段代码有什么问题,或者这可以更有效地完成吗?特别是,我有点担心parrallel.foreach发射/调用委托内的代码。这可能会导致任何问题? 我问,因为目前消费者无法跟上正在生产的物品在很多情况下,导致内存问题。Parallel.Foreach委托调用另一个委托
public delegate void DataChangedDelegate(DataItem obj);
public class Consumer
{
public DataChangedDelegate OnCustomerChanged;
public DataChangedDelegate OnOrdersChanged;
private CancellationTokenSource cts;
private CancellationToken ct;
private BlockingCollection<DataItem> queue;
public Consumer(BlockingCollection<DataItem> queue) {
this.queue = queue;
Start();
}
private void Start() {
cts = new CancellationTokenSource();
ct = cts.Token;
Task.Factory.StartNew(() => DoWork(), ct);
}
private void DoWork() {
Parallel.ForEach(queue.GetConsumingPartitioner(), item => {
if (item.DataType == DataTypes.Customer) {
OnCustomerChanged(item);
} else if(item.DataType == DataTypes.Order) {
OnOrdersChanged(item);
}
});
}
}
是否有多个消费者实例创建?如果是,为什么不只有一个静态实例处理队列? –
没有一个实例... – mike01010