BufferBlockT

(FIFO 佇列:進來的資料是輸出的資料)

簡而言之,BufferBlock 提供了一個無限制或有界緩衝區來儲存 T 的例項。
你可以將 T 的例項釋出到塊中,這會導致釋出的資料以先進先出(FIFO)順序儲存在街區。
你可以從塊中接收,這允許你同步或非同步地獲取以前儲存或將來可用的 T 的例項(同樣,FIFO)。

StackOverflow 文件

具有限制生產者的非同步生產者/消費者

// Hand-off through a bounded BufferBlock<T>
private static BufferBlock<int> _Buffer = new BufferBlock<int>(
    new DataflowBlockOptions { BoundedCapacity = 10 });

// Producer
private static async void Producer()
{
    while(true)
    {
        await _Buffer.SendAsync(Produce());
    }
}

// Consumer
private static async Task Consumer()
{
    while(true)
    {
        Process(await _Buffer.ReceiveAsync());
    } 
}

// Start the Producer and Consumer
private static async Task Run()
{
    await Task.WhenAll(Producer(), Consumer());
}

Stephen Toub 介紹 TPL 資料流