Bagikan melalui


DataflowBlock.Encapsulate<TInput,TOutput> Metode

Definisi

Merangkum target dan sumber ke dalam satu penyebar.

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)

Jenis parameter

TInput

Menentukan jenis input yang diharapkan oleh target.

TOutput

Menentukan jenis output yang dihasilkan oleh sumber.

Parameter

target
ITargetBlock<TInput>

Target untuk merangkum.

source
ISourceBlock<TOutput>

Sumber untuk merangkum.

Mengembalikan

Target dan sumber yang dienkapsulasi.

Keterangan

Metode ini Encapsulate memerlukan dua blok yang ada: blok target (instans ITargetBlock<TInput>kelas yang mengimplementasikan ) dan blok sumber (instans ISourceBlock<TOutput>kelas yang mengimplementasikan ). Encapsulate membuat instans baru kelas internal yang menghubungkan ITargetBlock<TInput> anggota antarmuka ke target parameter dan ISourceBlock<TOutput> anggota antarmuka ke source parameter. Baik ITargetBlock<TInput> dan ISourceBlock<TOutput> berasal dari IDataflowBlock. Penyelesaian blok secara eksplisit diteruskan dari sumber ke target. Oleh karena itu, Complete metode dan Fault terhubung ke target saat Completion properti terhubung ke sumbernya. Anda harus memastikan bahwa ketika target setengah selesai, setengah sumber selesai dengan cara yang paling tepat; misalnya:

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

Atau, jika Anda ingin menyebarluaskan jenis penyelesaian, Anda dapat menggunakan kode yang lebih canggih ini:

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

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

Anda juga harus secara eksplisit memberikan penyebaran pesan dari target ke sumber. Manfaat dari koneksi eksplisit ini adalah memberi Anda kebebasan untuk melakukan pemrosesan yang tidak dibatasi antara dua blok yang dienkapsulasi. Anda dapat melakukannya baik dengan mengodekan pemrosesan yang diperlukan ke delegasi blok (jika blok mengambil delegasi), atau dengan menyematkan sub-jaringan blok di antara mereka. Cara yang lebih mudah adalah dengan menggunakan blok yang mengambil delegasi; misalnya, gunakan ActionBlock<TInput>, , TransformBlock<TInput,TOutput>TransformManyBlock<TInput,TOutput> (jika berlaku), atau blok kustom.

Berlaku untuk