Partager via


DataflowBlock.Encapsulate<TInput,TOutput> Méthode

Définition

Encapsule une cible et une source dans un propagateur unique.

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 (une 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> au target paramètre et les membres de l’interface ISourceBlock<TOutput> au source paramètre . ISourceBlock<TOutput> Et dérivent à la fois ITargetBlock<TInput> de IDataflowBlock. L’achèvement des blocs est explicitement passé des sources aux cibles. Par conséquent, les Complete méthodes et Fault 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 se termine, 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 vers la source. L’avantage de cette connexion explicite est qu’elle vous donne la liberté d’effectuer tout traitement sans contrainte 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 acceptent des délégués), ou en incorporant un sous-réseau de blocs entre eux. Le moyen le plus simple consiste à utiliser un bloc qui accepte des délégués ; Par exemple, utilisez ActionBlock<TInput>, TransformBlock<TInput,TOutput>, TransformManyBlock<TInput,TOutput> (le cas échéant) ou un bloc personnalisé.

S’applique à