生产者消费者模式使用TPL&任务

时间:2012-11-06 17:13:56

标签: c# task-parallel-library async-await

我们有一个标准的生产者消费者实现,其中BlockingCollection与任务一起使用。

使用阻塞集合上的GetConsumingEnumerable()完成项目的消耗,然后使用消费者线程上的RunSynchronously()执行每个任务。

这对我们来说很好,但现在一些任务而不是很短暂的任务将与后端Web服务进行对话。

所以问题是,以这种方式完成执行长时间运行活动的任务是否可接受,或者这将消耗更多资源,并且从blockcollection获取的循环需要在某种程度上调整以使用continuation代替?如果它不在循环中,那么我总是使用continuation进行这些操作。

当前代码如

foreach(var task in _Queue.GetConsumingEnumerable())
{
    if (!task.IsCanceled)
    {
        task.RunSynchronously();
    }
}

鉴于我们所针对的平台,使用异步等待是不可能的。

0 个答案:

没有答案