Maison >développement back-end >C++ >Dois-je me débarrasser des tâches Fire-and-Forget dans la TPL ?
Tâches de lancement et d'oubli avec la bibliothèque parallèle de tâches : problèmes d'élimination
Lors du déclenchement de tâches de lancement et d'oubli avec la bibliothèque parallèle de tâches Library (TPL), les développeurs sont généralement confrontés à des questions sur l'élimination appropriée des objets Task. Bien que la documentation MSDN souligne la nécessité d'appeler Dispose() avant de publier la dernière référence, les implications pratiques de ne pas le faire ne sont pas claires.
Selon Stephen Toub de Microsoft, l'élimination des tâches existe principalement pour gérer des ressources potentiellement non gérées. utilisé en attendant la fin de la tâche. Cependant, dans les scénarios où seules les continuations sont utilisées (comme dans les tâches "fire-and-forget"), ce handle d'événement n'est pas alloué.
Dans un article de blog récent, Toub précise en outre que dans .Net 4.5, le gestionnaire interne le handle d’attente n’est alloué que lors de la récupération explicite de la propriété IAsyncResult.AsyncWaitHandle. De plus, l'objet Task lui-même n'a pas de finaliseur ; au lieu de cela, le handle est encapsulé dans un objet avec un finaliseur. À moins que le handle ne soit alloué, aucun finaliseur ne sera invoqué.
Résumé
Basé sur ces informations :
Dans la plupart des cas, oui, il est acceptable de ne pas appeler Dispose(). Le finaliseur se chargera du nettoyage.
Oui, le billet de blog de Stephen Toub fournit des explications détaillées.
Appeler Dispose() n'est pas nécessaire dans la plupart des scénarios.
Non, le modèle d'utilisation de Task.Factory.StartNew() est l'approche suggérée pour tâches de feu et d'oubli.
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!