Как многократно повторять параллельную очередь?

Я использую 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 явно для каждого элемента, который вы хотите.

Другие вопросы по тегам