DataflowBlock.Encapsulate<TInput,TOutput> Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Kapslar in ett mål och en källa i en enda spridning.
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)
Typparametrar
- TInput
Anger vilken typ av indata som förväntas av målet.
- TOutput
Anger vilken typ av utdata som genereras av källan.
Parametrar
- target
- ITargetBlock<TInput>
Målet att kapsla in.
- source
- ISourceBlock<TOutput>
Källan som ska kapslas in.
Returer
Det inkapslade målet och källan.
Kommentarer
Metoden Encapsulate kräver två befintliga block: ett målblock (en instans av en klass som implementerar ITargetBlock<TInput>) och ett källblock (en instans av en klass som implementerar ISourceBlock<TOutput>).
Encapsulate skapar en ny instans av en intern klass som ansluter gränssnittsmedlemmarna ITargetBlock<TInput> till parametern target och gränssnittsmedlemmarna ISourceBlock<TOutput> till parametern source . Både ITargetBlock<TInput> och ISourceBlock<TOutput> härleds från IDataflowBlock. Blockera slutförande skickas uttryckligen från källor till mål. Därför Complete är metoderna och Fault anslutna till målet medan Completion egenskapen är ansluten till källan. Du måste se till att när målhalvan är klar slutförs källhalvan på det lämpligaste sättet. till exempel:
target.Completion.ContinueWith(completion => source.Complete());
Om du vill sprida slutförandetypen kan du använda den här mer avancerade koden:
target.Completion.ContinueWith(completion => { if (completion.IsFaulted)
((IDataflowBlock)batchBlock).Fault(completion.Exception);
else
batchBlock.Complete();
});
Du måste också uttryckligen ange meddelandespridningen från mål till källa. Fördelen med den här explicita anslutningen är att den ger dig friheten att utföra obehindrat bearbetning mellan de två inkapslade blocken. Du kan göra det antingen genom att koda nödvändig bearbetning i blockens ombud (om blocken tar ombud) eller genom att bädda in ett undernätverk med block mellan dem. Det enklare sättet är att använda ett block som tar ombud; Använd ActionBlock<TInput>till exempel , TransformBlock<TInput,TOutput>, TransformManyBlock<TInput,TOutput> (om tillämpligt) eller ett anpassat block.