DataflowBlock.Encapsulate<TInput,TOutput> Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Hermetyzuje element docelowy i źródło do pojedynczego propagatora.
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
Określa typ danych wejściowych oczekiwany przez element docelowy.
- TOutput
Określa typ danych wyjściowych generowanych przez źródło.
Parametry
- target
- ITargetBlock<TInput>
Element docelowy do hermetyzacji.
- source
- ISourceBlock<TOutput>
Źródło hermetyzacji.
Zwraca
Hermetyzowany element docelowy i źródło.
Uwagi
Metoda Encapsulate wymaga dwóch istniejących bloków: bloku docelowego (wystąpienia klasy implementujące ITargetBlock<TInput>) i bloku źródłowego (wystąpienia klasy implementujące ISourceBlock<TOutput>).
EncapsulateTworzy nowe wystąpienie klasy wewnętrznej, która łączy elementy członkowskie interfejsu z ITargetBlock<TInput> parametrem i ISourceBlock<TOutput> elementami członkowskimi target
interfejsu z parametremsource
. Zarówno, jak ITargetBlock<TInput> i ISourceBlock<TOutput> pochodzi z IDataflowBlock. Uzupełnianie bloku jest jawnie przekazywane ze źródeł do elementów docelowych.
Complete W związku z tym metody i Fault są połączone z obiektem docelowym, gdy Completion właściwość jest połączona ze źródłem. Należy upewnić się, że po zakończeniu połowy docelowej połowa źródła zostanie ukończona w najbardziej odpowiedni sposób; na przykład:
target.Completion.ContinueWith(completion => source.Complete());
Jeśli chcesz propagować typ ukończenia, możesz użyć tego bardziej zaawansowanego kodu:
target.Completion.ContinueWith(completion => { if (completion.IsFaulted)
((IDataflowBlock)batchBlock).Fault(completion.Exception);
else
batchBlock.Complete();
});
Należy również jawnie podać propagację komunikatu z lokalizacji docelowej do źródła. Zaletą tego jawnego połączenia jest to, że zapewnia swobodę wykonywania dowolnego nieprzyciętego przetwarzania między dwoma hermetyzowanym blokami. Można to zrobić, kodując niezbędne przetwarzanie do delegatów bloków (jeśli bloki przyjmują delegatów) lub przez osadzanie podsieci bloków między nimi. Łatwiejszym sposobem jest użycie bloku, który przyjmuje delegatów; na przykład użyj ActionBlock<TInput>polecenia , , TransformManyBlock<TInput,TOutput>TransformBlock<TInput,TOutput>(jeśli dotyczy) lub bloku niestandardowego.