Menguruskan pelaksanaan serentak pelbagai operasi tak segerak selalunya memerlukan pendikitan tugas. Aliran Data Task Parallel Library (TPL) menyediakan penyelesaian yang elegan untuk cabaran biasa ini.
TPL Dataflow TransformBlock<TInput, TOutput>
menawarkan mekanisme yang teguh untuk mengawal tahap maksimum pelaksanaan tugas selari. Ini membolehkan anda memproses strim data (seperti URL) dengan cekap dan mengumpulkan hasil setelah pemprosesan selesai.
Berikut ialah contoh pelaksanaan praktikal:
<code class="language-csharp">var downloader = new TransformBlock<string, HttpResponse>( url => Download(url), new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 50 } ); var buffer = new BufferBlock<HttpResponse>(); downloader.LinkTo(buffer); foreach (var url in urls) downloader.Post(url); //or await downloader.SendAsync(url); downloader.Complete(); await downloader.Completion; IList<HttpResponse> responses; if (buffer.TryReceiveAll(out responses)) { //process responses }</code>
Kod ini mencipta TransformBlock
(bernama downloader
) mengehadkan muat turun serentak kepada 50. downloader
dipautkan kepada BufferBlock
(buffer
) untuk memegang objek HttpResponse
. Selepas menyerahkan semua URL, kami menandakan selesai dan menunggu downloader
selesai. Akhir sekali, jawapan yang dikumpul diambil daripada buffer
.
TPL Dataflow menawarkan kelebihan ketara berbanding kaedah pendikit manual:
Adalah penting untuk ambil perhatian bahawa TransformBlock
menimpan input dan output. Untuk mengelakkan kemungkinan kebuntuan, memautkannya ke BufferBlock
yang berasingan, seperti yang ditunjukkan di atas dan mendapatkan semula keputusan selepas siap adalah disyorkan.
Atas ialah kandungan terperinci Bagaimanakah TPL Dataflow Dapat Memudahkan Pendikitan Tugas Asynchronous?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!