BufferBlock<T>
是一个非常好的队列异步接口。
我正在寻找的是类似的东西,但要使用LIFO堆栈。我在传递BlockingCollection
时正在寻找ConcurrentStack
的等效功能,但我希望具有TakeAsync
和AddAsync
而不是在Take和Add上阻塞线程。这基本上是BufferBlock<T>
给我的,但这是一个FIFO队列,我需要一个LIFO堆栈。
我正在寻找异步堆栈的无锁版本。我不在乎它是否适合数据流,我只是以BufferBlock
为例。我不打算将其与数据流结合使用。
最佳答案
TPL Dataflow
当然不支持这种功能,否则就不会有“流程”。
您可以使用Stephen Cleary的AsyncCollection
。它是围绕任何IProducerConsumerCollection
的异步包装,在您的情况下可能是ConcurrentStack
var stack = new ConcurrentStack<int>();
var asyncStack = new AsyncCollection<int>(stack);
await asyncStack.AddAsync(4);
await asyncStack.AddAsync(6);
int top = await asyncStack.TakeAsync();
关于c# - 与TPL数据流BufferBlock <T>等效的异步堆栈,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23862449/