DataflowBlock.Encapsulate<TInput,TOutput> Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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.