DataflowBlock.Encapsulate<TInput,TOutput> Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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.