DataflowBlock.Encapsulate<TInput,TOutput> Método

Definição

Encapsula um alvo e uma fonte num único propagador.

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)

Parâmetros de Tipo Genérico

TInput

Especifica o tipo de entrada esperada pelo alvo.

TOutput

Especifica o tipo de saída produzida pela fonte.

Parâmetros

target
ITargetBlock<TInput>

O alvo a encapsular.

source
ISourceBlock<TOutput>

A fonte a encapsular.

Devoluções

O alvo encapsulado e a fonte.

Observações

O Encapsulate método requer dois blocos existentes: um bloco-alvo (uma instância de uma classe que implementa ITargetBlock<TInput>) e um bloco de origem (uma instância de uma classe que implementa ISourceBlock<TOutput>). Encapsulate cria uma nova instância de uma classe interna que liga os ITargetBlock<TInput> membros da interface ao target parâmetro e os ISourceBlock<TOutput> membros da interface ao source parâmetro. Tanto ITargetBlock<TInput> como ISourceBlock<TOutput> derivam de IDataflowBlock. A completude de blocos é explicitamente transmitida das fontes para os alvos. Portanto, os Complete métodos e Fault estão ligados ao alvo enquanto a Completion propriedade está ligada à fonte. Deve garantir que, quando a metade alvo estiver concluída, a metade de origem seja concluída da forma mais adequada; Por exemplo:

target.Completion.ContinueWith(completion => source.Complete());

Ou, se quiser propagar o tipo de completação, pode usar este código mais sofisticado:

target.Completion.ContinueWith(completion => { if (completion.IsFaulted)

((IDataflowBlock)batchBlock).Fault(completion.Exception);
else
batchBlock.Complete();
});

Deve também fornecer explicitamente a propagação da mensagem do destino para a origem. A vantagem desta ligação explícita é que lhe dá a liberdade de realizar qualquer processamento sem restrições entre os dois blocos encapsulados. Pode fazer isso codificando o processamento necessário nos delegados dos blocos (se os blocos receberem delegados), ou incorporando uma sub-rede de blocos entre eles. A forma mais fácil é usar um bloco que receba delegados; por exemplo, use ActionBlock<TInput>, TransformBlock<TInput,TOutput>, TransformManyBlock<TInput,TOutput> (se aplicável), ou um bloco personalizado.

Aplica-se a