¿Cuáles son las diferencias entre ConcurrentQueue
y BlockingCollection
en .Net?¿Cuáles son las diferencias entre ConcurrentQueue y BlockingCollection en .Net?
¿Por qué BlockingCollection
es el mejor para la operación productor-consumidor cuando se puede hacer a través de ConcurrentQueue
? ¿Debo mejorar algo en el siguiente código?
MessageSlotMachineGameStartOrAndStatusUpdate msg;
while (!aCancellationToken.IsCancellationRequested)
{
try
{
this.isStillConsumingMsg = true;
Boolean takeResult = this.msgQueue.TryTake(out msg, this.msgConsumeTimeOut, aCancellationToken);
if (takeResult)
{
if (msg != null)
{
this.ProcessMessage(msg);
}
}
else
{
break;
}
}
catch (OperationCanceledException err)
{
EngineManager.AddExceptionLog(err, "Signal Operation Canceled");
}
catch (Exception err)
{
EngineManager.AddExceptionLog(err, "Signal exception");
}
finally
{
this.isStillConsumingMsg = false;
}
}
me puede dar una muestra de cómo se puede hacer la notificación. –
@WAPGuy Puede usar un ['AutoResetEvent'] (http://msdn.microsoft.com/en-us/library/system.threading.autoresetevent.aspx). Siga el enlace y desplácese hacia abajo para ver un ejemplo de cómo se usa. – dasblinkenlight
¿está bien, cuando señala a WaitHandle? inmediatamente cuando está vacío o después de un tiempo de espera dado en el método Take? –