Sdílet prostřednictvím


DataflowBlock.Encapsulate<TInput,TOutput> Metoda

Definice

Zapouzdří cíl a zdroj do jednoho šíření.

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)

Parametry typu

TInput

Určuje typ vstupu očekávaného cílem.

TOutput

Určuje typ výstupu vytvořeného zdrojem.

Parametry

target
ITargetBlock<TInput>

Cíl zapouzdření.

source
ISourceBlock<TOutput>

Zdroj k zapouzdření.

Návraty

Zapouzdřený cíl a zdroj

Poznámky

Metoda Encapsulate vyžaduje dva existující bloky: cílový blok (instance třídy, která implementuje ITargetBlock<TInput>) a zdrojový blok (instance třídy, která implementuje ISourceBlock<TOutput>). Encapsulate vytvoří novou instanci interní třídy, která připojí ITargetBlock<TInput> členy rozhraní k parametru target a ISourceBlock<TOutput> členy rozhraní k parametru source . Oba systémy ITargetBlock<TInput> a ISourceBlock<TOutput> jsou odvozeny z IDataflowBlock. Doplňování bloku se explicitně předává ze zdrojů cílům. Complete Proto jsou metody a Fault připojeny k cíli, zatímco Completion vlastnost je připojena ke zdroji. Musíte zajistit, aby po dokončení cílové poloviny byla zdrojová polovina dokončena nejvhodnějším způsobem; Příklad:

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

Nebo pokud chcete rozšířit typ dokončení, můžete použít tento sofistikovanější kód:

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

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

Musíte také explicitně zadat šíření zpráv z cíle do zdroje. Výhodou tohoto explicitního připojení je to, že vám dává volnost provádět jakékoli zpracování bez omezení mezi dvěma zapouzdřenými bloky. Můžete to udělat buď kódováním potřebného zpracování do delegátů bloků (pokud bloky přebírají delegáty), nebo vložením podsítě bloků mezi nimi. Jednodušší způsob je použít blok, který přijímá delegáty; Použijte například ActionBlock<TInput>, TransformBlock<TInput,TOutput>TransformManyBlock<TInput,TOutput> (pokud je k dispozici) nebo vlastní blok.

Platí pro