如何实现一个等待元素进入pop的堆栈

时间:2016-05-10 14:52:03

标签: c# .net stack observablecollection observable

我的问题与我所描述的不同,但其本质是类比的。

我们考虑stack。堆栈有方法pop()。此方法从顶部删除元素并将其返回。

问题

当堆栈中没有元素时,不会抛出异常。相反,请等到可以弹出一个元素(即推送新元素时)。

我头脑风暴几个小时,这里有一些想法出现在我的脑海中:

  • TPL数据流
  • 反应性扩展
  • SpinWait.SpinUntil()

我不确定这些是否是解决问题的好方法,但它闻起来像 observable

如何接近它?

目标:弹出在Parallel.ForEach内消耗。当资源可用时,应尽快返回。

1 个答案:

答案 0 :(得分:0)

我认为您需要一个包含命令的队列(例如pop())。

当堆栈中没有元素时,pop()命令将不会执行,而是保留在队列中。

一旦将某些内容插入到堆栈中,命令解释器将检查它是否可以执行命令(在您的情况下为pop())然后执行它。

如果async更改,您可以使用stack模式通知您,解释器将执行命令。这样就可以避免轮询以检查堆栈状态是否已更改。

Observable Collection似乎也是一个不错的选择。