Udostępnij za pośrednictwem


DataflowBlock.Encapsulate<TInput,TOutput> Metoda

Definicja

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.

Dotyczy