【发布时间】:2017-11-08 08:24:43
【问题描述】:
我有一个基于 Marc Gravell's Blocking Queue 的阻塞队列类
现在我有一些情况,我只想让某个对象出队,我知道这不是队列的真正用例,但在某些情况下,我认为这是一个很好的扩展,例如等待某个网络答案.
这有点像
TryDequeueWhere(Func<T, bool> expression, out T value, int? waitTimeInMs = null)
问题是我不知道如何等待和阻止某个对象。
【问题讨论】:
-
我建议使用
BlockingCollection与BlockingQueue。 -
如果你打电话给
TryDequeueWhere会发生什么?假设匹配条目位于索引 5。究竟会发生什么?索引 6 处的条目会移动到 5(等等)吗? -
如果某个元素与表达式匹配,则在该位置移除该元素,因此下一个元素将向右上移。
-
简短的回答是这不是队列(如您所知)。你能建吗?当然。基本上你需要锁定整个队列,foreach 直到你找到匹配的元素。如果找到匹配项,则需要新建一个全新的队列(包含匹配项之前和之后的元素)。然后解锁。
标签: c# queue mutex blockingqueue