我开发了一个通用的生产者-消费者队列,它由 Monitor 以下列方式脉冲:
入队:
public void EnqueueTask(T task)
{
_workerQueue.Enqueue(task);
Monitor.Pulse(_locker);
}
出队:
private T Dequeue()
{
T dequeueItem;
if (_workerQueue.Count > 0)
{
_workerQueue.TryDequeue(out dequeueItem);
if(dequeueItem!=null)
return dequeueItem;
}
while (_workerQueue.Count == 0)
{
Monitor.Wait(_locker);
}
_workerQueue.TryDequeue(out dequeueItem);
return dequeueItem;
}
等待部分产生以下 SynchronizationLockException :“从未同步的代码块调用对象同步方法”我需要同步它吗?为什么 ?使用 ManualResetEvents 还是 .NET 4.0 的 Slim 版本更好?