Ne pas supprimer les tâches TPL : conséquences et solutions alternatives
Lors du déclenchement d'une tâche pour qu'elle s'exécute en arrière-plan sans attendre son achèvement, le problème commun l'utilisation de Task.Factory.StartNew() soulève des questions sur la nécessité d'appeler Dispose() sur l'objet Task renvoyé. Bien que MSDN recommande de supprimer toutes les tâches, la question de la suppression des tâches dans ce scénario spécifique est souvent négligée.
Concernant les conséquences de la non-élimination, Stephen Toub, membre de l'équipe Microsoft PFX, clarifie que Task.Dispose() existe pour gérer un handle d'événement utilisé dans certains scénarios d'attente. Cependant, lorsque les continuations sont le principal moyen d'accéder à la tâche, ce handle d'événement ne sera jamais alloué. Stephen Toub suggère de s'appuyer sur la finalisation pour gérer ces tâches.
La documentation officielle sur ce sujet est limitée. Cependant, le billet de blog de Stephen Toub, « Dois-je disposer des tâches ? » développe ce problème et met en évidence les améliorations introduites dans .Net 4.5.
En général, vous n'avez pas besoin de disposer des tâches. des objets Task la plupart du temps. Les raisons de se débarrasser incluent la libération rapide des ressources non gérées et l'évitement du coût du finaliseur. Cependant, ces considérations ne s'appliquent généralement pas aux objets Task :
Méthodes alternatives pour les tâches de déclenchement et d'oubli avec TPL :
Si l'élimination des objets de tâche reste un problème, il existe des approches alternatives :
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!