DataflowBlock.Encapsulate<TInput,TOutput> 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将目标和源封装入单一的传播程序。
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。 块完成从源显式传递到目标。 因此, Complete 和 Fault 方法在 属性连接到源时 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> ((如果适用)) 或自定义块。