Maison >développement back-end >C++ >Comment puis-je attendre de manière asynchrone une tâche avec un temps mort?

Comment puis-je attendre de manière asynchrone une tâche avec un temps mort?

Linda Hamilton
Linda Hamiltonoriginal
2025-02-01 10:05:14859parcourir

How Can I Asynchronously Wait for a Task with a Timeout?

Gestion des tâches asynchrones: implémentation de délais

La programmation asynchrone efficace nécessite la gestion des tâches. Parfois, cependant, nous devons imposer des délais à ce processus d'attente. Cet article détaille une méthode pour attendre de manière asynchrone un Task<T> tout en respectant les contraintes de délai d'attente.

La solution: combinant Task.WhenAny() et Task.Delay()

Le noyau de cette solution réside dans l'utilisation combinée de Task.WhenAny() et Task.Delay(). Task.WhenAny(task1, task2) attend la première des deux tâches à terminer. Nous en levons en créant un Task.Delay() représentant notre période de délai d'expiration.

Task.WhenAny() surveille à la fois la tâche cible et la tâche de délai d'expiration simultanément. Si la tâche cible se termine avant le délai d'expiration, Task.WhenAny() renvoie la tâche cible. Sinon, il renvoie la tâche Task.Delay(), indiquant le délai d'expiration.

Extension de la solution: incorporer l'annulation

Pour un contrôle amélioré, envisagez d'ajouter un support d'annulation. Passez un jeton d'annulation à la fois à la tâche cible et Task.Delay(). Cela permet une annulation immédiate de l'une ou l'autre source. Une manipulation minutieuse de l'annulation et de l'achèvement des tâches est cruciale pour prévenir les conditions de course.

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