簡體   English   中英

異步堆棧等效於TPL數據流BufferBlock <T>

[英]Async stack equivalent of TPL Dataflow BufferBlock<T>

BufferBlock<T>是一個非常好的隊列異步接口。

我正在尋找的是類似的東西,但要使用LIFO堆棧。 我在通過ConcurrentStack時正在尋找BlockingCollection等效功能,但我希望具有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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM