我们有一个标准的生产者消费者实现,其中BlockingCollection与任务一起使用。
使用阻塞集合上的GetConsumingEnumerable()完成项目的消耗,然后使用消费者线程上的RunSynchronously()执行每个任务。
这对我们来说很好,但现在一些任务而不是很短暂的任务将与后端Web服务进行对话。
所以问题是,以这种方式完成执行长时间运行活动的任务是否可接受,或者这将消耗更多资源,并且从blockcollection获取的循环需要在某种程度上调整以使用continuation代替?如果它不在循环中,那么我总是使用continuation进行这些操作。
当前代码如
foreach(var task in _Queue.GetConsumingEnumerable())
{
if (!task.IsCanceled)
{
task.RunSynchronously();
}
}
鉴于我们所针对的平台,使用异步等待是不可能的。