- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有两个阻塞集合 - 一个优先级高于另一个。如果我使用 TryTakeFromAny 并首先指定更高优先级的 BlockingCollection,是否可以保证首先查看更高优先级的队列?
最佳答案
这没有记录在案,所以我想说不能保证它将来不会改变。可能不建议长期依赖它。然而,目前,BlockingCollection<T>.TryTakeFromAny
通过索引检查项目(它检查 Count > 0 然后执行 TryTake
)循环遍历所有集合来进行快速检查。如果没有找到项目,它会为每个集合获取一个内部等待句柄并将它们传递给 WaitHandle.WaitAny
.这提供了保证:
This method returns when any handle is signaled. If more than one object becomes signaled during the call, the return value is the array index of the signaled object with the smallest index value of all the signaled objects.
因此当前的实现确实会按要求运行。如果两个集契约(Contract)时获得一个项目,则将采用较低索引的项目。
关于c# - C# BlockingCollection 的 TryTakeFromAny 是否保证顺序检查 BlockingCollection 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26472251/
我有两个阻塞集合 - 一个优先级高于另一个。如果我使用 TryTakeFromAny 并首先指定更高优先级的 BlockingCollection,是否可以保证首先查看更高优先级的队列? 最佳答案 这
我有一个使用 BlockingCollection<> 实现的下载队列.现在我想偶尔优先考虑一些下载。我认为将某些元素“向上”移动到集合中可能会很棒,例如在列表中,但没有像 Remove()/AddF
BlockingCollection.Dispose实际上做什么? 最佳答案 这样可以正确处理内部等待 handle 。 BlockingCollection在内部使用一对事件等待句柄,它们又具有关联
BlockingCollection blockingCollection = new BlockingCollection(); // create and start a producer
将来自多个线程的消息放到一个队列中并让一个单独的线程一次处理一个队列中的项目的最佳方法是什么? 在尝试断开多个线程的事件时,我经常使用这种模式。 我正在为此使用 BlockingCollection,
我正在尝试正确建模多线程单生产者/多消费者场景,其中消费者可以要求生产者获取元素,但生产者需要执行耗时的操作来生产它(想想执行查询或打印文档)。 我的目标是确保没有消费者可以同时要求生产者生产一件商品
我知道使用 ConcurrentQueue 的 BlockingCollection 的 boundedcapacity 为 100。 但是我不确定那是什么意思。 我正在尝试实现一个并发缓存,如果队列
BlockingCollection 仅包含添加单个项目的方法。如果我想添加一个集合怎么办?我应该只使用 foreach 循环吗? 为什么 BlockingCollection 不包含添加集合的方法?
我正在编写一个 WCF 服务,它从多个模块(数据库、其他服务..)接收通知并将它们添加到阻塞集合中,以便在将相关数据发布到客户端的使用者线程上进行处理。 客户端可以请求存储在服务器上的完整数据,在此操
我有这样一种情况,我需要有大量(数百个)队列,其中的项目应该按顺序处理(需要单线程消费者)。我的第一个实现,based on the samples,我为每个 BlockingCollection 使
Stephen Toub 的书第 88 页 http://www.microsoft.com/download/en/details.aspx?id=19222 有代码 private Blockin
我即将使用如下所示的 BlockingCollection,只是想检查它是否适合线程安全等。想知道我是否需要 CancellationTokenSource。 谢谢 public class MyAp
你好,我正在尝试创建一个使用流数据的应用程序......(所以没有结束......完成......等) 由于它的性质,因为流数据得到了很多操作,我使用 BlockingCollection,它工作得很
我有一个 BlockingCollection .生产者任务向其中添加项目,消费者任务移除项目。 现在我想限制集合中的项目数量,如果添加了更多项目,则自动丢弃旧数据。该集合不应同时包含超过 N 个最近
我有一个线程将项目添加到 BlockingCollection 。 在我正在使用的另一个线程上foreach(myCollection.GetConsumingEnumerable() 中的 var
我有一个程序如下 class Program { public static int TaskCount { get; set; } public stati
我有以下代码,其中包含一个生产者线程和多个消费者线程。你知道多个消费者是否是线程安全的。例如,线程 1 是否有可能正在消费,而线程 2 是否并行消费并更改线程 1 中使用的项目的值? namespac
我需要建立一个阻塞优先级队列,我的预感是 TakeFromAny 可能是 secret 成分,但是关于该方法的文档很少。它的目的/适当用途是什么? 我的要求是多个线程将添加到高优先级或低优先级队列中。
有没有办法删除 具体 BlockingCollection 中的项目,如下所示: IMyItem mySpecificItem = controller.getTopRequestedItem();
我试图在.NET 4上新的Parallel Stacks的背景下理解BlockingCollection的目的。 MSDN文档说: BlockingCollection用作IProducerConsu
我是一名优秀的程序员,十分优秀!