這段代碼有什麼問題,或者這可以更有效地完成嗎?特別是,我有點擔心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