TPL-Aufgaben nicht entsorgen: Konsequenzen und alternative Lösungen
Beim Auslösen einer Aufgabe, die im Hintergrund ausgeführt wird, ohne auf ihren Abschluss zu warten, ist das übliche Die Verwendung von Task.Factory.StartNew() wirft Fragen zur Notwendigkeit des Aufrufs von Dispose() für das zurückgegebene Task-Objekt auf. Während MSDN empfiehlt, alle Aufgaben zu entsorgen, wird das Problem der Aufgabenentsorgung in diesem speziellen Szenario oft übersehen.
Zu den Konsequenzen einer Nichtentsorgung erklärt Stephen Toub, ein Mitglied des Microsoft PFX-Teams dass Task.Dispose() vorhanden ist, um ein Ereignishandle zu verarbeiten, das in bestimmten Warteszenarien verwendet wird. Wenn jedoch Fortsetzungen das primäre Mittel für den Zugriff auf die Aufgabe sind, wird dieses Ereignishandle niemals zugewiesen. Stephen Toub schlägt vor, sich bei der Bewältigung dieser Aufgaben auf die Finalisierung zu verlassen.
Offizielle Dokumentation zu diesem Thema ist begrenzt. Allerdings geht Stephen Toubs Blogbeitrag „Muss ich Aufgaben entsorgen?“ näher auf dieses Problem ein und hebt die in .Net 4.5 eingeführten Verbesserungen hervor.
Im Allgemeinen Sie müssen nicht entsorgen von Task-Objekten die meiste Zeit. Gründe für die Entsorgung sind die sofortige Freigabe nicht verwalteter Ressourcen und die Vermeidung der Finalizer-Kosten. Diese Überlegungen gelten jedoch normalerweise nicht für Task-Objekte:
Alternative Methoden für Fire-and-Forget-Aufgaben mit TPL:
Wenn die Entsorgung von Aufgabenobjekten immer noch ein Problem darstellt, gibt es alternative Ansätze:
Das obige ist der detaillierte Inhalt vonMuss ich Fire-and-Forget-TPL-Aufgaben entsorgen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!