DataflowBlock.Encapsulate<TInput,TOutput> Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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.