C# Language BufferBlock


Exemple

(FIFO Queue: Les données qui entrent sont les données qui sortent)

En bref, BufferBlock fournit un tampon non lié ou limité pour stocker les instances de T.
Vous pouvez «publier» des instances de T sur le bloc, ce qui entraîne le stockage des données à enregistrer dans un ordre FIFO (first-in-first-out) par le bloc.
Vous pouvez «recevoir» du bloc, ce qui vous permet d'obtenir de manière synchrone ou asynchrone des instances de T précédemment stockées ou disponibles (encore une fois, FIFO).

entrer la description de l'image ici

Producteur / consommateur asynchrone avec un producteur étranglé

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

Introduction à TPL Dataflow par Stephen Toub