C# Language ActionBlock


Exemple

(pour chaque)

Cette classe peut être considérée logiquement comme un tampon pour les données à traiter combinées avec des tâches pour traiter ces données, avec le «bloc de flux de données» gérant les deux. Dans son utilisation la plus élémentaire, nous pouvons instancier un ActionBlock et y «publier» des données; le délégué fourni lors de la construction du ActionBlock sera exécuté de manière asynchrone pour chaque donnée envoyée.

entrer la description de l'image ici

Calcul synchrone

var ab = new ActionBlock<TInput>(i => 
{
    Compute(i);
});
…
ab.Post(1);
ab.Post(2);
ab.Post(3);

Limiter les téléchargements asynchrones à 5 au maximum simultanément

var downloader = new ActionBlock<string>(async url =>
{
    byte [] imageData = await DownloadAsync(url);
    Process(imageData);
}, new DataflowBlockOptions { MaxDegreeOfParallelism = 5 }); 

downloader.Post("http://website.com/path/to/images");
downloader.Post("http://another-website.com/path/to/images");

Introduction à TPL Dataflow par Stephen Toub