Maison > développement back-end > C++ > Comment le flux de données TPL peut-il limiter les tâches asynchrones simultanées ?

Comment le flux de données TPL peut-il limiter les tâches asynchrones simultanées ?

Mary-Kate Olsen
Libérer: 2025-01-22 20:22:12
original
541 Les gens l'ont consulté

How Can TPL Dataflow Limit Concurrent Asynchronous Tasks?

Utilisez TPL Dataflow pour limiter le nombre de tâches asynchrones simultanées

Cet article explique comment utiliser TPL Dataflow pour limiter efficacement le nombre de tâches asynchrones simultanées tout en tirant pleinement parti du multi-threading. Par rapport à l'approche BlockingCollection utilisant SemaphoreSlim et ThrottleTasksAsync, TPL Dataflow fournit une solution plus propre.

En configurant l'attribut TransformBlock de MaxDegreeOfParallelism, nous pouvons directement spécifier le nombre maximum de tâches exécutées simultanément. Ajoutez des URL à TransformBlock et il les gérera de manière asynchrone. Une fois le traitement terminé, les résultats sont disponibles.

<code class="language-csharp">var downloader = new TransformBlock<string, HttpResponse>(
    url => Download(url),
    new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 50 }
);

var buffer = new BufferBlock<HttpResponse>();
downloader.LinkTo(buffer);

foreach (var url in urls)
    downloader.Post(url);

downloader.Complete();
await downloader.Completion;

IList<HttpResponse> responses;
if (buffer.TryReceiveAll(out responses))
{
    // 处理结果
}</code>
Copier après la connexion

Il convient de noter que TransformBlock met en mémoire tampon les entrées et les sorties. Par conséquent, nous le connectons à BufferBlock pour empêcher TransformBlock de se bloquer jusqu'à ce que tous les éléments de sortie soient consommés. La méthode BufferBlock.TryReceiveAll est utilisée pour récupérer tous les résultats une fois TransformBlock terminé.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal