【发布时间】:2016-09-05 15:21:03
【问题描述】:
我的问题与我将要描述的不同,但本质是类比。
让我们考虑一个stack。堆栈具有方法pop()。此方法从顶部移除元素并返回它。
问题
当栈中没有元素时,不要抛出异常。而是等到一个元素可以被弹出(即当一个新元素被推送时)。
我为此集思广益几个小时,以下是我想到的一些想法:
- TPL 数据流
- 反应式扩展
SpinWait.SpinUntil()
我不确定这些是否是解决问题的好方法,但它闻起来像可观察。
如何处理?
目标:在Parallel.ForEach 内消耗弹出。当资源可用时,应尽快归还。
【问题讨论】:
-
BlockingCollection在 System.Collections.Concurrent;听起来像你想要的。它有一个GetConsumingEnumerable(),当与 foreach 循环一起使用时,它会在元素存在时获取元素,并在为空时等待。这些也是线程安全的。
标签: c# .net stack observablecollection observable