[英]Async stack equivalent of TPL Dataflow BufferBlock<T>
BufferBlock<T>
是一個非常好的隊列異步接口。
我正在尋找的是類似的東西,但要使用LIFO堆棧。 我在通過ConcurrentStack
時正在尋找BlockingCollection
等效功能,但我希望具有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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.