33
ConcurrentQueue
とBlockingCollection
の違いは何ですか?.NETのConcurrentQueueとBlockingCollectionの違いは何ですか?
なぜBlockingCollection
は、ConcurrentQueue
で実行できる場合、プロデューサ - コンシューマの操作に最適ですか?次のコードで何か改善する必要がありますか?
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;
}
}
通知を行う方法のサンプルを教えてください。 –
@WAPGuy ['AutoResetEvent'](http://msdn.microsoft.com/en-us/library/system.threading.autoresetevent.aspx)を使用することができます。リンクをたどって、それがどのように使用されているかの例を下にスクロールします。 – dasblinkenlight
WaitHandleに信号を送るとOKですか?それが空であるか、またはTakeメソッドで与えられたタイムアウトの後すぐに? –