BufferBlock<T>是一个非常好的队列异步接口。

我正在寻找的是类似的东西,但要使用LIFO堆栈。我在传递BlockingCollection时正在寻找ConcurrentStack的等效功能,但我希望具有TakeAsyncAddAsync而不是在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/

10-12 18:55