我的问题与我所描述的不同,但其本质是类比的。
我们考虑stack
。堆栈有方法pop()
。此方法从顶部删除元素并将其返回。
当堆栈中没有元素时,不会抛出异常。相反,请等到可以弹出一个元素(即推送新元素时)。
我头脑风暴几个小时,这里有一些想法出现在我的脑海中:
SpinWait.SpinUntil()
我不确定这些是否是解决问题的好方法,但它闻起来像 observable 。
如何接近它?
目标:弹出在Parallel.ForEach
内消耗。当资源可用时,应尽快返回。
答案 0 :(得分:0)
我认为您需要一个包含命令的队列(例如pop()
)。
当堆栈中没有元素时,pop()
命令将不会执行,而是保留在队列中。
一旦将某些内容插入到堆栈中,命令解释器将检查它是否可以执行命令(在您的情况下为pop()
)然后执行它。
如果async
更改,您可以使用stack
模式通知您,解释器将执行命令。这样就可以避免轮询以检查堆栈状态是否已更改。
Observable Collection
似乎也是一个不错的选择。