');

C# Language ActionBlock

Esempio

(per ciascuno)

Questa classe può essere considerata logicamente come un buffer per i dati da elaborare in combinazione con le attività per l'elaborazione di tali dati, con il "blocco del flusso di dati" che gestisce entrambi. Nel suo uso più basilare, possiamo istanziare un oggetto ActionBlock e "postare" i dati su di esso; il delegato fornito alla costruzione di ActionBlock verrà eseguito in modo asincrono per ogni dato inviato.

inserisci la descrizione dell'immagine qui

Calcolo sincrono

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

Limitazione di download asincroni fino a un massimo di 5 contemporaneamente

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");

Introduzione a TPL Dataflow di Stephen Toub