Ответ 1
Вы правы. Документация довольно скудная. Тем не менее, я взглянул на реализацию через Reflector, и я считаю, что вы можете использовать метод BlockingCollection.TakeFromAny
для имитации приоритета приоритета, который вы желаете. Причина в том, что в реализации используется метод WaitHandle.WaitAny
, который возвращает наименьший индекс для всех сигнализированных объектов. Это означает, что если у вас есть две или более очереди с доступными элементами, всегда будет выбрана очередь, появляющаяся сначала в массиве.
Следующий код должен всегда выводить "высокий".
var low = new BlockingCollection<object> { "low" };
var high = new BlockingCollection<object> { "high" };
var array = new BlockingCollection<object>[] { high, low };
object item;
int index = BlockingCollection<object>.TakeFromAny(array, out item);
Console.WriteLine(item);