Looking for c# Keywords? Try Ask4Keywords

C# Language BufferBlock


пример

(Очередь FIFO: данные, которые поступают, - это данные, которые исчезают)

Короче говоря, BufferBlock предоставляет неограниченный или ограниченный буфер для хранения экземпляров T.
Вы можете «отправить» экземпляры T в блок, которые заставляют данные, которые будут размещаться, быть сохранены в порядке первого входа в первый (FIFO) блоком.
Вы можете «получать» из блока, что позволяет синхронно или асинхронно получать экземпляры T, ранее сохраненные или доступные в будущем (опять же, FIFO).

введите описание изображения здесь

Асинхронный производитель / потребитель с дроссельной заслонкой

// 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());
}

Введение в поток данных TPL Стивена Туба