通过


DataflowBlock.Encapsulate<TInput,TOutput> 方法

定义

将目标和源封装到单个传播器中。

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)

类型参数

TInput

指定目标预期输入的类型。

TOutput

指定源生成的输出的类型。

参数

target
ITargetBlock<TInput>

要封装的目标。

source
ISourceBlock<TOutput>

要封装的源。

返回

封装的目标和源。

注解

该方法 Encapsulate 需要两个现有块:目标块(实现 ITargetBlock<TInput>的类的实例)和源块(实现 ISourceBlock<TOutput>的类的实例)。 Encapsulate 创建内部类的新实例,该实例将 ITargetBlock<TInput> 接口成员连接到 target 参数,并将 ISourceBlock<TOutput> 接口成员连接到 source 参数。 两者都ITargetBlock<TInput>ISourceBlock<TOutput>派生自 IDataflowBlock. 块完成从源显式传递到目标。 因此,当属性连接到源时Completion,这些Complete方法和Fault方法将连接到目标。 必须确保目标半部分完成时,源半部分以最合适的方式完成:例如:

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

或者,如果要传播完成类型,可以使用以下更复杂的代码:

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

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

还必须显式提供从目标到源的消息传播。 此显式连接的好处是,它使你能够自由地在两个封装块之间执行任何不受约束的处理。 可以通过将必要的处理编码到块的委托(如果块采用委托),或者通过在它们之间嵌入块的子网络来执行此操作。 使用接受委托的块更为简单;例如,使用 ActionBlock<TInput>TransformBlock<TInput,TOutput>TransformManyBlock<TInput,TOutput> 如果适用)或自定义块。

适用于