¿Monitor.Wait necesita sincronización?
He desarrollado una cola genérica productor-consumidor que pulsa por Monitor de la siguiente manera:
la cola:
public void EnqueueTask(T task)
{
_workerQueue.Enqueue(task);
Monitor.Pulse(_locker);
}
la cola:
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;
}
la sección de espera produce la siguiente excepción SynchronizationLockException: "se llamó al método de sincronización de objetos desde un bloque de código no sincronizado" ¿necesito sincronizarlo? por qué ? ¿Es mejor usar ManualResetEvents o la versión Slim de .NET 4.0?