Heim > Backend-Entwicklung > C++ > Sollte ich Fire-and-Forget-Aufgaben im TPL entsorgen?

Sollte ich Fire-and-Forget-Aufgaben im TPL entsorgen?

Susan Sarandon
Freigeben: 2025-01-03 20:35:40
Original
248 Leute haben es durchsucht

Should I Dispose of Fire-and-Forget Tasks in the TPL?

Fire-and-Forget-Aufgaben mit der Task Parallel Library: Entsorgungsbedenken

Beim Auslösen von Fire-and-Forget-Aufgaben mit der Task Parallel Bibliothek (TPL) stehen Entwickler häufig vor Fragen zur ordnungsgemäßen Entsorgung von Task-Objekten. Während in der MSDN-Dokumentation die Notwendigkeit betont wird, Dispose() vor der Veröffentlichung der letzten Referenz aufzurufen, sind die praktischen Auswirkungen, wenn man dies nicht tut, unklar.

Laut Stephen Toub von Microsoft dient die Task-Entsorgung in erster Linie dazu, potenziell nicht verwaltete Ressourcen zu verwalten Wird verwendet, wenn auf den Abschluss einer Aufgabe gewartet wird. In Szenarien, in denen nur Fortsetzungen verwendet werden (wie bei Fire-and-Forget-Aufgaben), wird dieses Ereignishandle jedoch nicht zugewiesen.

In einem aktuellen Blogbeitrag stellt Toub weiter klar, dass in .Net 4.5 das interne Das Wartehandle wird nur zugewiesen, wenn die Eigenschaft IAsyncResult.AsyncWaitHandle explizit abgerufen wird. Darüber hinaus verfügt das Task-Objekt selbst nicht über einen Finalizer. Stattdessen wird das Handle mit einem Finalizer in ein Objekt gekapselt. Sofern das Handle nicht zugewiesen ist, wird kein Finalizer aufgerufen.

Zusammenfassung

Basierend auf diesen Erkenntnissen:

  • Ist es das? Es ist akzeptabel, in diesem Fall Dispose() nicht für die Task-Klasse aufzurufen Fall?

In den meisten Fällen ist es akzeptabel, Dispose() nicht aufzurufen. Der Finalizer übernimmt die Bereinigung.

  • Gibt es eine Dokumentation, die dies bespricht?

Ja, Stephen Toubs Blogbeitrag enthält detaillierte Erklärungen.

  • Gibt es eine geeignete Möglichkeit, das Task-Objekt, das ich habe, zu entsorgen? verpasst?

Der Aufruf von Dispose() ist in den meisten Szenarien nicht notwendig.

  • Gibt es eine andere Möglichkeit, Fire & Forget-Aufgaben mit der TPL zu erledigen? ?

Nein, das Muster der Verwendung von Task.Factory.StartNew() ist der empfohlene Ansatz für Feuer-und-Vergessen-Aufgaben.

Das obige ist der detaillierte Inhalt vonSollte ich Fire-and-Forget-Aufgaben im TPL entsorgen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage