我需要建立一个阻塞优先级队列,我的预感是TakeFromAny https://learn.microsoft.com/en-us/dotnet/api/system.collections.concurrent.blockingcollection-1.takefromany可能是秘密成分,但是有关该方法的文档很少。其目的/适当用途是什么?
我的要求是多个线程将添加到高优先级或低优先级队列中。一个线程将消耗这两个队列,并且始终先从高优先级队列获取,然后再从低优先级队列获取。
很可能两者都不是BlockingCollection
or the TakeFromAny
方法对我有用。如果是这样,那么指向正确方向的指针将不胜感激。
你是对的。文档相当稀疏。不过,我查看了通过 Reflector 的实现,我相信您可以使用BlockingCollection.TakeFromAny
方法来模拟您想要的优先级偏差。原因是因为该实现使用了WaitHandle.WaitAny
返回所有有信号对象的最小索引的方法。这意味着如果您有两个或更多带有可用项目的队列,那么将始终选择数组中第一个出现的队列。
以下代码应始终输出“高”。
var low = new BlockingCollection<object> { "low" };
var high = new BlockingCollection<object> { "high" };
var array = new BlockingCollection<object>[] { high, low };
object item;
int index = BlockingCollection<object>.TakeFromAny(array, out item);
Console.WriteLine(item);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)