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řuje 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, který se zapouzdřuje.
Návraty
Zapouzdřený cíl a zdroj.
Poznámky
Metoda Encapsulate vyžaduje dva existující bloky: cílový blok (instanci třídy, která implementuje ITargetBlock<TInput>) a zdrojový blok (instanci třídy, která implementuje ISourceBlock<TOutput>).
Encapsulate vytvoří novou instanci interní třídy, která spojuje ITargetBlock<TInput> členy rozhraní s parametrem target a ISourceBlock<TOutput> členy rozhraní s parametrem source . Oba ITargetBlock<TInput> a ISourceBlock<TOutput> odvozovat z IDataflowBlock. Doplňování bloku se explicitně předává ze zdrojů do cílů.
Complete Proto jsou a Fault metody připojeny k cíli, zatímco Completion vlastnost je připojena ke zdroji. Je nutné zajistit, aby se po dokončení cílové poloviny zdrojová polovina dokončila nejvhodnějším způsobem; Napří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, že vám dává svobodu provádět jakékoli nekontrénované zpracování mezi těmito dvěma zapouzdřenými bloky. Můžete to provést 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řebírá delegáty; Například použijte ActionBlock<TInput>, , TransformBlock<TInput,TOutput>( TransformManyBlock<TInput,TOutput> pokud je k dispozici) nebo vlastní blok.