ConcurrentQueue в C#
Класс ConcurrentQueue - потокобезопасная очередь: элемент, поставленный раньше, выходит раньше. Несколько производителей могут вызывать Enqueue, несколько потребителей - TryDequeue без внешнего lock.
Метод TryDequeue возвращает false на пустой очереди вместо исключения. Порядок сохраняется для элементов одного производителя. Если ставят несколько потоков сразу, порядок между ними не фиксирован.
Поставим два числа и снимем оба. Сняли 1 и 2 в порядке постановки, их сумма равна 3. Третий съём с пустой очереди вернул бы false:
using System.Collections.Concurrent;
ConcurrentQueue<int> q = new();
q.Enqueue(1);
q.Enqueue(2);
q.TryDequeue(out int first);
q.TryDequeue(out int second);
Console.WriteLine(first + second); // выведет 3
Поставьте в очередь строки "red" и "blue", "red" первой. Снимите обе и выведите их в консоль через пробел в порядке выхода.