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>するクラスのインスタンス) の 2 つの既存のブロックが必要です。 Encapsulate は、インターフェイス メンバーを パラメーターに、インターフェイス メンバーを パラメーターに ITargetBlock<TInput> 接続する target 内部クラスの ISourceBlock<TOutput> 新しいインスタンスを source 作成します。 と の両方 ITargetBlock<TInput>ISourceBlock<TOutput> から 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();   
});  

また、ターゲットからソースへのメッセージ伝達を明示的に指定する必要もあります。 この明示的な接続の利点は、2 つのカプセル化されたブロック間で制約のない処理を自由に実行できる点です。 これを行うには、必要な処理をブロックのデリゲートにエンコードするか (ブロックがデリゲートを受け取る場合)、またはそれらの間にブロックのサブネットワークを埋め込みます。 より簡単な方法は、デリゲートを受け取るブロックを使用することです。たとえば、(該当する場合)、またはカスタム ブロックを使用ActionBlock<TInput>TransformBlock<TInput,TOutput>TransformManyBlock<TInput,TOutput>します。

適用対象