【发布时间】:2017-05-30 09:01:38
【问题描述】:
我在 c# 中有某种工作管理器,它将接收要执行的任务并执行它们。任务将来自不同的线程,但它们必须按照接收顺序同时执行一个。 我不想要一个 while 循环,它会一直运行,检查它们是否是队列中的新任务。是否有内置队列或实现队列的简单方法,该队列将等待任务并同步执行它们而无需忙于等待?
【问题讨论】:
-
我不认为这种模式有构建功能,但你可以通过 SemaphoreSlim 构建一个没有 while 循环的模式
-
你检查ConcurrentQueue<T>和/或Queue.Synchronized了吗?
-
TPL 数据流是一种可行的方法,考虑到您的要求是它并非一直在运行。您可以控制它的执行方式(在线程等方面),所以我认为您应该能够确保一次只运行一个。但请注意不要创建积压。
-
“我不想要一个while循环”你想在线程池上运行它们吗?我制作了一个等待执行项目的 WorkerThread。 (它将被通知开始。它也支持批处理。但它会产生一个带有 while 循环的线程)
-
BlockingCollection(它是 TPL DataFlow 的基本元素)是您正在寻找的。尽管看起来像,但也没有忙着等待。等待由事件完成,没有 cpu 时间成本 => 不忙但等待
标签: c# multithreading queue task