C# Language WriteOnceBlock


Exemple

(Variable en lecture seule: Mémorise son premier élément de données et en distribue des copies en tant que sortie. Ignore tous les autres éléments de données)

Si BufferBlock est le bloc le plus fondamental dans TPL Dataflow, WriteOnceBlock est le plus simple.
Il stocke au plus une valeur et, une fois cette valeur définie, elle ne sera jamais remplacée ou remplacée.

Vous pouvez penser à WriteOnceBlock comme étant similaire à une variable membre readonly en C #, sauf qu'au lieu d'être uniquement paramétrable dans un constructeur et ensuite immuable, il est seulement définissable une fois et est alors immuable.

entrer la description de l'image ici

Fractionnement des sorties potentielles d'une tâche

public static async void SplitIntoBlocks(this Task<T> task,
    out IPropagatorBlock<T> result, 
    out IPropagatorBlock<Exception> exception)
{
    result = new WriteOnceBlock<T>(i => i);
    exception = new WriteOnceBlock<Exception>(i => i);

    try 
    { 
        result.Post(await task); 
    }
    catch(Exception ex) 
    { 
        exception.Post(ex); 
    }
}

Introduction à TPL Dataflow par Stephen Toub