Как многократно повторять параллельную очередь?
Я использую Winforms и таргетинг.Net 4.5
Я хочу повторять параллельную очередь до тех пор, пока в ней есть элементы. В моем приложении пользователь может добавлять и удалять элементы в параллельной очереди в любой момент.
Образец кода:
ConcurrentQueue<string> cq = new ConcurrentQueue<string>();
cq.Enqueue("First");
cq.Enqueue("Second");
cq.Enqueue("Third");
cq.Enqueue("Fourth");
cq.Enqueue("Fifth");
private void someMethod(string)
{
//do stuff
}
while (!cq.IsEmpty)
{
//how do I do the code below in a loop?
//inner loop starts here
someMethod(current cq item);
//move to the next item
someMethod(the next cq item);
//move to the next item
someMethod(the next cq item);
.
.
.
//if last item is reached, start from the top
}
Помните, что пользователь приложения может добавлять или удалять элементы из очереди в любое время, даже когда работает цикл while.
1 ответ
Вы должны обернуть очередь в BlockingCollection
(и затем не обращаясь непосредственно к основной очереди), чтобы иметь потокобезопасную очередь, которая позволяет вам ждать (блокировать) доступ к элементу. Когда у вас есть, что вы можете использовать GetConsumingEnumerable()
если вы хотите перебрать элементы для обработки, или просто позвоните Take
явно для каждого элемента, который вы хотите.