我已经开发了一个通用的生产者 - 消费者队列,它由Monitor以下列方式产生脉冲:
入队:
public void EnqueueTask(T task)
{
_workerQueue.Enqueue(task);
Monitor.Pulse(_locker);
}
Run Code Online (Sandbox Code Playgroud)
出队:
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;
}
Run Code Online (Sandbox Code Playgroud)
wait部分产生以下SynchronizationLockException:"从一个不同步的代码块中调用了对象同步方法"我是否需要同步它?为什么?使用ManualResetEvents还是Slim版本的.NET 4.0会更好吗?