Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya dapat mengehadkan operasi async I/O serentak dalam .net?
Menguruskan operasi I/O Asynchronous bersamaan dalam .net
dengan cekap mengendalikan pelbagai operasi tak segerak adalah penting untuk mencegah keletihan sumber. Artikel ini membincangkan senario biasa: Melaksanakan permintaan HTTP selari ke pelbagai URL sambil mengehadkan bilangan permintaan serentak.
memanfaatkan async semaphore
.net's kelas, dipertingkatkan dalam .NET 4.5 beta, menyediakan semaphore asynchronous yang cekap untuk mengawal operasi async serentak. Inilah cara melaksanakannya: SemaphoreSlim
<code class="language-csharp">public async Task MyOuterMethod() { var throttler = new SemaphoreSlim(initialCount: 20); foreach (var url in urls) { await throttler.WaitAsync(); using (var client = new HttpClient()) // Added using statement for proper resource disposal { var html = await client.GetStringAsync(url); } throttler.Release(); } }</code>Kod ini mencipta semaphore yang membolehkan maksimum 20 permintaan serentak. Setiap
permintaan menunggu ketersediaan semaphore sebelum pelaksanaan dan melepaskannya setelah selesai. Perhatikan penambahan pernyataan HttpClient
untuk pelupusan using
yang betul. HttpClient
Alternatif: penjadualan tugas berasaskan tpl
Perpustakaan Selari Tugas (TPL) menawarkan pendekatan lain. Dengan membuat tugas yang terikat kepada perwakilan dan menggunakan penjadual tugas tersuai, anda boleh menguruskan kesesuaian. MSDN menyediakan contoh pelaksanaan adat untuk penerokaan lanjut. TaskScheduler
kelebihan async semaphore
Semaphore Asynchronous menawarkan faedah utama:
Atas ialah kandungan terperinci Bagaimanakah saya dapat mengehadkan operasi async I/O serentak dalam .net?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!