Was sind die Unterschiede zwischen ConcurrentQueue und BlockingCollection in .Net?

Was sind die Unterschiede zwischen ConcurrentQueue und BlockingCollection im .Net?

Warum BlockingCollection ist am besten für die Erzeuger-Verbraucher-operation, wenn es getan werden kann, durch ConcurrentQueue? Muss ich noch etwas verbessern in dem folgenden code?

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;
    }
}
  • BlockingCollection verwendet CurrentQueue als der zugrunde liegende Typ, um die Daten aufzunehmen. Plus es hat die Blockierung der Funktionalität.
  • auch nur Hinweis BlockingCollection verwendet ConcurrentQueue standardmäßig, aber Sie können geben Sie einen anderen collection-Typ im Konstruktor implementiert, dass IProducerConsumerCollection...zum Beispiel, wenn Sie wollten, LIFO könnten Sie eine ConcurrentStack statt
InformationsquelleAutor WAP Guy | 2012-04-04
Schreibe einen Kommentar