Maison >développement back-end >C++ >Comment puis-je limiter les opérations d'E / S asynchrones simultanées dans .NET?
Gérer les E / S asynchrones simultanées dans .NET
Gérer efficacement le nombre d'opérations d'E / S asynchrones simultanées est vitale pour éviter l'épuisement des ressources. .NET offre plusieurs mécanismes pour y parvenir.
Tiration de SemaphoreSlim
pour le contrôle de concurrence asynchrone
Puisque .NET 4.5, SemaphoreSlim
La méthode WaitAsync()
> fournit une synchronisation asynchrone solide robuste. Cela permet un contrôle précis sur le nombre d'opérations asynchrones simultanées.
Voici un exemple:
<code class="language-csharp">public async Task MyOuterMethod() { // Semaphore initialized to allow 20 concurrent operations var throttler = new SemaphoreSlim(20); var tasks = new List<Task>(); foreach (var url in urls) { // Wait for available semaphore slot await throttler.WaitAsync(); tasks.Add(Task.Run(async () => { try { using (var client = new HttpClient()) { var html = await client.GetStringAsync(url); // Process html... } } finally { // Release semaphore slot after completion (success or failure) throttler.Release(); } })); } await Task.WhenAll(tasks); }</code>
Planification de tâches basée sur TPL avec limites de concurrence
Alternativement, la bibliothèque parallèle de la tâche (TPL) peut être utilisée conjointement avec un planificateur de tâches personnalisé pour appliquer les limites de concurrence. Cela implique de créer des tâches mais de retarder leur exécution jusqu'à ce qu'un emplacement soit disponible.
Points supplémentaires à considérer
TaskScheduler
: MSDN fournit des exemples de création d'implémentations personnalisées TaskScheduler
pour la gestion de concurrence à grain fin. 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!