Maison >développement back-end >C++ >Dois-je me débarrasser des tâches Fire-and-Forget dans la TPL ?

Dois-je me débarrasser des tâches Fire-and-Forget dans la TPL ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-03 20:35:40237parcourir

Should I Dispose of Fire-and-Forget Tasks in the 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 :

  • Est-ce acceptable de ne pas appeler Dispose() sur la classe Task dans ce cas ?

Dans la plupart des cas, oui, il est acceptable de ne pas appeler Dispose(). Le finaliseur se chargera du nettoyage.

  • Existe-t-il une documentation qui en parle ?

Oui, le billet de blog de Stephen Toub fournit des explications détaillées.

  • Existe-t-il un moyen approprié de disposer de l'objet Task que j'ai manqué ?

Appeler Dispose() n'est pas nécessaire dans la plupart des scénarios.

  • Existe-t-il une autre façon d'effectuer des tâches Fire & Forget avec le TPL ?

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!

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