Partager via


DataflowBlock.Encapsulate<TInput,TOutput> Méthode

Définition

Encapsule une cible et une source dans un seul propagateur.

public:
generic <typename TInput, typename TOutput>
 static System::Threading::Tasks::Dataflow::IPropagatorBlock<TInput, TOutput> ^ Encapsulate(System::Threading::Tasks::Dataflow::ITargetBlock<TInput> ^ target, System::Threading::Tasks::Dataflow::ISourceBlock<TOutput> ^ source);
public static System.Threading.Tasks.Dataflow.IPropagatorBlock<TInput,TOutput> Encapsulate<TInput,TOutput>(System.Threading.Tasks.Dataflow.ITargetBlock<TInput> target, System.Threading.Tasks.Dataflow.ISourceBlock<TOutput> source);
static member Encapsulate : System.Threading.Tasks.Dataflow.ITargetBlock<'Input> * System.Threading.Tasks.Dataflow.ISourceBlock<'Output> -> System.Threading.Tasks.Dataflow.IPropagatorBlock<'Input, 'Output>
Public Function Encapsulate(Of TInput, TOutput) (target As ITargetBlock(Of TInput), source As ISourceBlock(Of TOutput)) As IPropagatorBlock(Of TInput, TOutput)

Paramètres de type

TInput

Spécifie le type d’entrée attendu par la cible.

TOutput

Spécifie le type de sortie produit par la source.

Paramètres

target
ITargetBlock<TInput>

Cible à encapsuler.

source
ISourceBlock<TOutput>

Source à encapsuler.

Retours

Cible et source encapsulées.

Remarques

La Encapsulate méthode nécessite deux blocs existants : un bloc cible (instance d’une classe qui implémente ITargetBlock<TInput>) et un bloc source (instance d’une classe qui implémente ISourceBlock<TOutput>). Encapsulate crée une instance d’une classe interne qui connecte les membres de l’interface ITargetBlock<TInput>target au paramètre et les membres de l’interface ISourceBlock<TOutput> au source paramètre. Les deux ITargetBlock<TInput> et ISourceBlock<TOutput> dérivent de IDataflowBlock. La saisie semi-automatique de bloc est transmise explicitement des sources aux cibles. Par conséquent, les méthodes et Fault les Complete méthodes sont connectées à la cible pendant que la Completion propriété est connectée à la source. Vous devez vous assurer que lorsque la moitié cible est terminée, la moitié source est terminée de la manière la plus appropriée ; par exemple :

target.Completion.ContinueWith(completion => source.Complete());

Ou, si vous souhaitez propager le type d’achèvement, vous pouvez utiliser ce code plus sophistiqué :

target.Completion.ContinueWith(completion => { if (completion.IsFaulted)

((IDataflowBlock)batchBlock).Fault(completion.Exception);
else
batchBlock.Complete();
});

Vous devez également fournir explicitement la propagation du message de la cible à la source. L’avantage de cette connexion explicite est qu’elle vous donne la liberté d’effectuer tout traitement non contraint entre les deux blocs encapsulés. Vous pouvez le faire en encodant le traitement nécessaire dans les délégués des blocs (si les blocs prennent des délégués) ou en incorporant un sous-réseau de blocs entre eux. La façon la plus simple consiste à utiliser un bloc qui prend des délégués ; par exemple, utilisez ActionBlock<TInput>, , TransformManyBlock<TInput,TOutput>TransformBlock<TInput,TOutput>(le cas échéant) ou un bloc personnalisé.

S’applique à