Heim > Backend-Entwicklung > C++ > Muss ich Aufgaben in Fire-and-Forget-Hintergrundoperationen löschen?

Muss ich Aufgaben in Fire-and-Forget-Hintergrundoperationen löschen?

Mary-Kate Olsen
Freigeben: 2025-01-03 07:24:40
Original
745 Leute haben es durchsucht

Do I Need to Dispose of Tasks in Fire-and-Forget Background Operations?

Ist die Aufgabenentsorgung für Fire-and-Forget-Hintergrundaufgaben erforderlich?

Beim Ausführen von Fire-and-Forget-Aufgaben in Hintergrundthreads, Entwickler verwenden häufig die Task Parallel Library (TPL)-Methode Task.Factory.StartNew(). Diese Methode gibt ein Task-Objekt zurück, was Bedenken hinsichtlich der ordnungsgemäßen Entsorgung aufwirft.

MSDN-Dokumentation empfiehlt, Dispose() aufzurufen, bevor der letzte Verweis auf eine Task freigegeben wird. Das Warten auf den Abschluss der Aufgabe zum Aufrufen dieser Methode macht jedoch den Zweck der Hintergrundausführung zunichte.

Diskussion

Laut Stephen Toub vom Microsoft pfx-Team kann ein Task-Objekt dies tun Umschließen Sie ein Ereignishandle, wenn Sie auf dessen Abschluss warten. Wenn jedoch Fortsetzungen verwendet werden, wird dieses Handle nie zugewiesen. Daher ist die Finalisierung eine geeignete Methode zur Bereinigung.

Update (Oktober 2012)

Toubs Blog-Beitrag „Muss ich Aufgaben entsorgen?“ liefert weitere Erläuterungen. In .NET 4.5 weist eine Aufgabe das interne Wartehandle nur zu, wenn AsyncWaitHandle explizit verwendet wird. Darüber hinaus verfügt Task nicht über einen Finalizer. Jedes zugewiesene Handle wird mit einem Finalizer in ein Objekt eingeschlossen. Dies bedeutet, dass die meisten Task-Objekte nicht entsorgt werden müssen.

Schlussfolgerungen

In den meisten Fällen ist es akzeptabel, auf den Aufruf von Dispose() für Task-Objekte zu verzichten, die zum Auslösen verwendet werden -und-vergessen Sie Hintergrundaufgaben. Für die Ressourcenbereinigung reicht in der Regel die Finalisierung aus. Wenn jedoch AsyncWaitHandle verwendet wird oder die Anwendung stark von solchen Aufgaben abhängig ist, kann eine explizite Entsorgung gerechtfertigt sein.

Das obige ist der detaillierte Inhalt vonMuss ich Aufgaben in Fire-and-Forget-Hintergrundoperationen löschen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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