DataflowBlock.Encapsulate(ITargetBlock<TInput>, ISourceBlock<TOutput>) DataflowBlock.Encapsulate(ITargetBlock<TInput>, ISourceBlock<TOutput>) DataflowBlock.Encapsulate(ITargetBlock<TInput>, ISourceBlock<TOutput>) DataflowBlock.Encapsulate(ITargetBlock<TInput>, ISourceBlock<TOutput>) Method

Definición

Encapsula un destino y un origen en un único propagador.Encapsulates a target and a source into a single propagator.

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 el tipo de entrada que se espera en el destino.Specifies the type of input expected by the target.

TOutput

Especifica el tipo de salida generado por el origen.Specifies the type of output produced by the source.

Parámetros

target
ITargetBlock<TInput> ITargetBlock<TInput> ITargetBlock<TInput> ITargetBlock<TInput>

Destino que se va a encapsular.The target to encapsulate.

source
ISourceBlock<TOutput> ISourceBlock<TOutput> ISourceBlock<TOutput> ISourceBlock<TOutput>

Origen que se va a encapsular.The source to encapsulate.

Devoluciones

Comentarios

El Encapsulate método requiere dos bloques existentes: un bloque de destino (una instancia de una clase que ITargetBlock<TInput>implementa) y un bloque de origen (una instancia de ISourceBlock<TOutput>una clase que implementa).The Encapsulate method requires two existing blocks: a target block (an instance of a class that implements ITargetBlock<TInput>) and a source block (an instance of a class that implements ISourceBlock<TOutput>). Encapsulatecrea una nueva instancia de una clase interna que conecta los ITargetBlock<TInput> miembros de la interfaz target al parámetro y ISourceBlock<TOutput> source los miembros de la interfaz al parámetro.Encapsulate creates a new instance of an internal class that connects the ITargetBlock<TInput> interface members to the target parameter and the ISourceBlock<TOutput> interface members to the source parameter. Y derivan deIDataflowBlock. ISourceBlock<TOutput> ITargetBlock<TInput>Both ITargetBlock<TInput> and ISourceBlock<TOutput> derive from IDataflowBlock. La finalización de bloques se pasa explícitamente desde los orígenes a los destinos.Block completion is explicitly passed from sources to targets. Por lo tanto Complete , Fault los métodos y están conectados al destino mientras Completion la propiedad está conectada al origen.Therefore, the Complete and Fault methods are connected to the target while the Completion property is connected to the source. Debe asegurarse de que cuando se completa la mitad de destino, la mitad de origen se completa de la manera más adecuada; por ejemplo:You must ensure that when the target half completes, the source half gets completed in the most appropriate manner; for example:

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

O bien, si desea propagar el tipo de finalización, puede usar este código más sofisticado:Or, if you want to propagate the completion type, you can use this more sophisticated code:

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

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

También debe proporcionar explícitamente la propagación de mensajes del destino al origen.You must also explicitly provide the message propagation from target to source. La ventaja de esta conexión explícita es que ofrece la libertad de realizar cualquier procesamiento sin restricciones entre los dos bloques encapsulados.The benefit of this explicit connection is that it gives you the freedom to perform any unconstrained processing between the two encapsulated blocks. Puede hacerlo mediante la codificación del procesamiento necesario en los delegados de los bloques (si los bloques aceptan delegados) o mediante la inserción de una subred de bloques entre ellos.You may do that either by encoding the necessary processing into the blocks' delegates (if the blocks take delegates), or by embedding a sub-network of blocks between them. La manera más fácil es usar un bloque que acepte delegados; por ejemplo, use ActionBlock<TInput>, TransformBlock<TInput,TOutput>, TransformManyBlock<TInput,TOutput> (si es aplicable) o un bloque personalizado.The easier way is to use a block that takes delegates; for example, use ActionBlock<TInput>, TransformBlock<TInput,TOutput>, TransformManyBlock<TInput,TOutput> (if applicable), or a custom block.

Se aplica a