C# Language TransformBlock


Exemple

(Sélectionnez un à un)

Comme avec ActionBlock, TransformBlock <TInput, TOutput> permet l'exécution d'un délégué pour effectuer certaines actions pour chaque donnée d'entrée; contrairement à ActionBlock, ce traitement a une sortie. Ce délégué peut être un Func <TInput, TOutput>, auquel cas le traitement de cet élément est considéré comme terminé lorsque le délégué revient, ou il peut s'agir d'un Func <TInput, Task>, auquel cas le traitement de cet élément est considéré comme terminé. lorsque le délégué renvoie, mais lorsque la tâche renvoyée est terminée. Pour ceux qui sont familiers avec LINQ, c'est un peu similaire à Select () dans la mesure où il prend une entrée, transforme cette entrée d'une certaine manière, puis produit une sortie.

Par défaut, TransformBlock <TInput, TOutput> traite ses données séquentiellement avec un MaxDegreeOfParallelism égal à 1. En plus de recevoir une entrée en mémoire tampon et de le traiter, ce bloc prend également toute sa sortie et son tampon traités (données qui n'ont pas été traitées et les données traitées).

Il comporte deux tâches: une pour traiter les données et une pour transmettre les données au bloc suivant.

entrer la description de l'image ici

Un pipeline concomitant

var compressor = new TransformBlock<byte[], byte[]>(input => Compress(input));
var encryptor = new TransformBlock<byte[], byte[]>(input => Encrypt(input));

compressor.LinkTo(Encryptor); 

Introduction à TPL Dataflow par Stephen Toub