Пожалуйста, смотрите ниже псевдокод
//Single or multiple Producers produce using below method
void Produce(object itemToQueue)
{
concurrentQueue.enqueue(itemToQueue);
consumerSignal.set;
}
//somewhere else we have started a consumer like this
//we have only one consumer
void StartConsumer()
{
while (!concurrentQueue.IsEmpty())
{
if (concurrentQueue.TrydeQueue(out item))
{
//long running processing of item
}
}
consumerSignal.WaitOne();
}
Как перенести этот шаблон, который я использовал с незапамятных времен, для использования задач, созданных на основе задач, и новых функций сигнализации сети 4. Другими словами, если кто-тонапишите этот шаблон, используя net 4, как бы он выглядел?Псевдокод в порядке.Я уже использую .net 4 concurrentQueue, как вы можете видеть.Как мне использовать задачу и, возможно, использовать более новый механизм сигнализации, если это возможно.спасибо
Решение моей проблемы ниже, благодаря Джон / Дан.Милая.Никакой ручной сигнализации или циклов типа (true) или while (itemstoProcess), как в старые времена
//Single or multiple Producers produce using below method
void Produce(object itemToQueue)
{
blockingCollection.add(item);
}
//somewhere else we have started a consumer like this
//this supports multiple consumers !
task(StartConsuming()).Start;
void StartConsuming()
{
foreach (object item in blockingCollection.GetConsumingEnumerable())
{
//long running processing of item
}
}
cancellations are handled using cancel tokens