Mengehadkan Tugas Asynchronous Serentat dalam .NET
Mengendalikan banyak operasi tak segerak serentak memerlukan pengurusan yang teliti untuk mencegah beban sistem. Kod contoh memulakan lebih daripada 1000 permintaan web secara serentak, resipi yang berpotensi untuk keletihan sumber.Kelas
, yang diperkenalkan dalam .NET 4.5 beta, menyediakan penyelesaian yang elegan untuk mengawal kesesuaian dengan kaedah SemaphoreSlim
. Ini membolehkan pengendalian operasi tak segerak yang cekap: WaitAsync
<code class="language-csharp">public async Task MyOuterMethod() { var semaphore = new SemaphoreSlim(20); // Maximum 20 concurrent requests var tasks = new List<Task>(); foreach (var url in urls) { await semaphore.WaitAsync(); // Acquire a permit tasks.Add(Task.Run(async () => { try { using (var client = new HttpClient()) // Use using statement for proper disposal { var html = await client.GetStringAsync(url); // Process the result } } finally { semaphore.Release(); // Release the permit } })); } await Task.WhenAll(tasks); // Wait for all tasks to complete }</code>
dengan kiraan 20, kami memastikan maksimum 20 permintaan serentak. SemaphoreSlim
berhenti pelaksanaan sehingga permit disediakan. Secara kritis, blok WaitAsync
menjamin permit dilepaskan, walaupun pengecualian berlaku. Pernyataan finally
memastikan pelupusan yang betul using
. HttpClient
menawarkan kaedah ringkas dan berkesan untuk menguruskan kesesuaian tak segerak. Dokumentasi MSDN memberikan butiran lanjut mengenai teknik alternatif ini. SemaphoreSlim
Atas ialah kandungan terperinci Bagaimanakah semaphoreslim mengawal konvensyen untuk operasi async dalam .net?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!