Maison >développement back-end >C++ >Comment le sémaphoreslime peut-il contrôler la concurrence des opérations asynchrones dans .NET?
limiter les tâches asynchrones simultanées dans .NET
Gestion de nombreuses opérations asynchrones simultanées nécessite une gestion minutieuse pour empêcher la surcharge du système. L'exemple de code initie plus de 1000 demandes Web simultanément, une recette potentielle d'épuisement des ressources.
La classe SemaphoreSlim
, introduite dans .NET 4.5 Beta, fournit une solution élégante pour contrôler la concurrence avec sa méthode WaitAsync
. Cela permet un fonctionnement asynchrone efficace étrangle:
<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>
En initialisant SemaphoreSlim
avec un décompte de 20, nous assurons un maximum de 20 demandes simultanées. WaitAsync
UNE UTILISATION UNE UNE PERME DISPONIBLE. Surtout, le bloc finally
garantit que le permis est libéré, même si des exceptions se produisent. La déclaration using
garantit une élimination appropriée de la HttpClient
.
Bien que des approches alternatives, telles que les planificateurs de tâches personnalisées, existent, SemaphoreSlim
offre une méthode concise et efficace pour gérer la concurrence asynchrone. La documentation MSDN fournit plus de détails sur ces techniques alternatives.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!