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 参数。 和 ISourceBlock<TOutput>ITargetBlock<TInput>派生自 IDataflowBlock。 块完成从源显式传递到目标。 因此, CompleteFault 方法在 属性连接到源时 Completion 连接到目标。 必须确保当目标一半完成时,源半部分以最合适的方式完成:例如:

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> ((如果适用)) 或自定义块。

适用于