DataflowBlock.Encapsulate<TInput,TOutput> Metoda
Definicja
Ważny
Niektóre informacje dotyczą produktów przedpremierowych, które mogą zostać znacznie zmodyfikowane przed premierą. Microsoft nie udziela żadnych gwarancji, ani wyraźnych, ani domniemanych, dotyczących informacji podanych tutaj.
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.