DataflowBlock.Encapsulate<TInput,TOutput> Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Encapsula um destino e uma origem em um ú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
- TInput
Especifica o tipo de entrada esperado pelo destino.
- TOutput
Especifica o tipo de saída produzido pela origem.
Parâmetros
- target
- ITargetBlock<TInput>
O destino a ser encapsulado.
- source
- ISourceBlock<TOutput>
A origem a ser encapsulada.
Retornos
O destino e a origem encapsulados.
Comentários
O Encapsulate método requer dois blocos existentes: um bloco de destino (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 conecta os membros da ITargetBlock<TInput> interface ao target
parâmetro e aos membros da ISourceBlock<TOutput> interface ao source
parâmetro .
ISourceBlock<TOutput> E ITargetBlock<TInput> derivam de IDataflowBlock. A conclusão do bloco é explicitamente passada de fontes para destinos. Portanto, os Complete métodos e Fault são conectados ao destino enquanto a Completion propriedade está conectada à origem. Você deve garantir que, quando a metade de destino for concluída, a metade de origem seja concluída da maneira mais apropriada; por exemplo:
target.Completion.ContinueWith(completion => source.Complete());
Ou, se você quiser propagar o tipo de conclusão, poderá usar este código mais sofisticado:
target.Completion.ContinueWith(completion => { if (completion.IsFaulted)
((IDataflowBlock)batchBlock).Fault(completion.Exception);
else
batchBlock.Complete();
});
Você também deve fornecer explicitamente a propagação de mensagem de destino para origem. O benefício dessa conexão explícita é que ela lhe dá a liberdade de executar qualquer processamento não treinado entre os dois blocos encapsulados. Você pode fazer isso codificando o processamento necessário nos delegados dos blocos (se os blocos levarem delegados) ou inserindo uma sub-rede de blocos entre eles. A maneira mais fácil é usar um bloco que leve delegados; por exemplo, use ActionBlock<TInput>, TransformBlock<TInput,TOutput>, TransformManyBlock<TInput,TOutput> (se aplicável) ou um bloco personalizado.