DataflowBlock.Encapsulate<TInput,TOutput> Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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é.