DataflowBlock.Encapsulate<TInput,TOutput> Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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.