Lorsque vous travaillez avec la bibliothèque parallèle de tâches (TPL) pour lancer des tâches en arrière-plan sans attendre leur achèvement, la question se pose de savoir si il est essentiel de disposer de l'objet Task renvoyé. Cet article vise à répondre à ce problème et à explorer les implications de ne pas appeler la méthode Dispose().
En TPL, la méthode StartNew() renvoie un objet Task qui implémente l'interface IDisposable. La documentation MSDN pour Task.Dispose() indique l'importance d'appeler Dispose avant de publier la dernière référence à la tâche.
Une préoccupation est que l'objet Task pourrait allouer les ressources non gérées, telles que les poignées d'attente, qui doivent être libérées explicitement via Dispose() pour éviter les fuites de mémoire. Cependant, Stephen Toub, membre de l'équipe Microsoft pfx, précise que ce scénario est peu probable.
Selon Toub, les objets Task n'attribuent un handle d'événement que lorsque leur attente nécessite un blocage (plutôt que de faire tourner ou d'exécuter le tâche en attente). Dans le cas de l'utilisation de continuations, ce handle d'événement n'est jamais alloué.
S'il n'est pas appelé explicitement, le finaliseur finira par récupérer toutes les ressources non gérées associées à un objet Task. Cependant, s'appuyer sur la finalisation n'est peut-être pas idéal, en particulier lors de la gestion d'un grand volume de tâches de type « feu et oubli », car cela peut surcharger le fil de finalisation.
En résumé, les recommandations générales le consensus est que la suppression des objets Task n’est généralement pas nécessaire dans la plupart des scénarios. Les recommandations suivantes fournissent des conseils :
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!