Maison >développement back-end >C++ >Comment puis-je limiter les opérations d'E / S asynchrones simultanées dans .NET?

Comment puis-je limiter les opérations d'E / S asynchrones simultanées dans .NET?

DDD
DDDoriginal
2025-02-01 20:56:15935parcourir

How Can I Limit Concurrent Asynchronous I/O Operations in .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

  1. Custom TaskScheduler: MSDN fournit des exemples de création d'implémentations personnalisées TaskScheduler pour la gestion de concurrence à grain fin.
  2. Modèles asynchrones parallèles: Utiliser des modèles asynchrones parallèles comme TAP (Task Asynchrone Pattern) ou des itérateurs asynchrones avec des flux asynchrones peuvent optimiser davantage l'exécution de tâches asynchrones simultanées.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn