Wann und wie sollte ich eine CancellationTokenSource entsorgen?
Jan 19, 2025 am 11:31 AMBest Practice: Mit CancellationTokenSource richtig umgehen
CancellationTokenSource
Obwohl Klassen freigegeben werden können, verwirrt die richtige Art der Freigabe Entwickler oft. In diesem Artikel wird erläutert, wann und wie diese Klasse effektiv veröffentlicht werden kann.
Einer der Gründe für diese Unklarheit ist, dass die Klasse CancellationTokenSource
keinen Finalizer hat. Dies bedeutet, dass der Garbage Collector (GC) ihn nicht automatisch freigeben kann. Daher liegt es in der Verantwortung des Entwicklers, die Tokenquelle explizit freizugeben.
Trotzdem werden in den auf MSDN bereitgestellten Beispielen Releases selten erwähnt. Was ist also der empfohlene Ansatz?
Release-Strategie
-
Verwenden Sie „using“-Anweisungen, wenn Sie auf den Abschluss von Aufgaben warten: Wenn Sie auf den Abschluss paralleler Aufgaben warten, können Sie Ihren Code mit einer „using“-Anweisung umschließen. Dadurch wird sichergestellt, dass die Token-Quelle nach Abschluss der Aufgabe automatisch freigegeben wird:
using (CancellationTokenSource tokenSource = new CancellationTokenSource()) { Task.Run(() => { }, tokenSource.Token); }
Nach dem Login kopieren -
Verwenden Sie ContinueWith und manuelle Freigabe: Alternativ können Sie einen ContinueWith-Ereignishandler für die Aufgabe registrieren und die Tokenquelle im Handler manuell freigeben:
Task.Run(async () => { try { // 任务代码 } finally { tokenSource.Dispose(); } }, tokenSource.Token);
Nach dem Login kopieren -
Abbrechbare PLINQ-Abfragen: Für abbrechbare PLINQ-Abfragen, die nicht synchron zurückgegeben werden, besteht die empfohlene Vorgehensweise darin, alle Vorgänge im
CancellationTokenSource
-Ereignishandler auszuführen.Dispose
Wiederverwendbarkeit und Mehrfachnutzung: Instanzen sind nicht wiederverwendbar. Sie sollten für jeden Stornovorgang erstellt und freigegeben werden.
CancellationTokenSource
Direkt freigeben: Wenn Sie keine „using“-Anweisung oder einen ContinueWith-Ereignishandler verwenden können, können Sie die Tokenquelle direkt freigeben, nachdem sie ihren Zweck erfüllt hat:
CancellationTokenSource tokenSource = new CancellationTokenSource(); Task.Run(() => { }, tokenSource.Token); // ... tokenSource.Dispose();
Nach dem Login kopieren
Zusammenfassung
Das Freigeben von Instanzen ist entscheidend, um Speicherlecks zu verhindern und eine ordnungsgemäße Ressourcenverwaltung sicherzustellen. Durch die Einhaltung der empfohlenen Release-Strategie können Entwickler Abbruchvorgänge in ihrem Code effizient handhaben. CancellationTokenSource
Das obige ist der detaillierte Inhalt vonWann und wie sollte ich eine CancellationTokenSource entsorgen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

GULC: C -Bibliothek von Grund auf neu gebaut

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

eindeutiger Gebrauch und Phrasenfreigabe

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?
