DataflowBlock.Encapsulate<TInput,TOutput> Methode

Definitie

Een doel en een bron inkapselen in één doorgifteprogramma.

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)

Type parameters

TInput

Hiermee geeft u het type invoer dat wordt verwacht door het doel.

TOutput

Hiermee geeft u het type uitvoer op dat door de bron wordt geproduceerd.

Parameters

target
ITargetBlock<TInput>

Het doel dat moet worden ingekapseld.

source
ISourceBlock<TOutput>

De bron die moet worden ingekapseld.

Retouren

Het ingekapselde doel en de bron.

Opmerkingen

Voor de Encapsulate methode zijn twee bestaande blokken vereist: een doelblok (een exemplaar van een klasse die implementeert ITargetBlock<TInput>) en een bronblok (een exemplaar van een klasse die wordt geïmplementeerd ISourceBlock<TOutput>). Encapsulate maakt een nieuw exemplaar van een interne klasse die de ITargetBlock<TInput> interfaceleden verbindt met de target parameter en de ISourceBlock<TOutput> interfaceleden met de source parameter. Beide ITargetBlock<TInput> en ISourceBlock<TOutput> afgeleid van IDataflowBlock. Voltooiing van blokkeren wordt expliciet doorgegeven van bronnen aan doelen. Daarom worden de Complete en Fault methoden verbonden met het doel terwijl de Completion eigenschap is verbonden met de bron. U moet ervoor zorgen dat wanneer de doel helft is voltooid, de bron helft op de meest geschikte manier wordt voltooid; bijvoorbeeld:

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

Als u het voltooiingstype wilt doorgeven, kunt u deze geavanceerdere code gebruiken:

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

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

U moet ook expliciet de berichtdoorgifte van het doel naar de bron opgeven. Het voordeel van deze expliciete verbinding is dat u de vrijheid krijgt om niet-getrainde verwerking tussen de twee ingekapselde blokken uit te voeren. U kunt dit doen door de benodigde verwerking te coderen in de gedelegeerden van de blokken (als de blokken gemachtigden zijn) of door een subnetwerk met blokken tussen de blokken in te sluiten. De eenvoudigere manier is om een blok te gebruiken dat gemachtigden neemt; Gebruik bijvoorbeeld ActionBlock<TInput>, TransformBlock<TInput,TOutput>( TransformManyBlock<TInput,TOutput> indien van toepassing) of een aangepast blok.

Van toepassing op