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!