Heim >Backend-Entwicklung >C++ >Wann und wie sollte ich eine CancellationTokenSource entsorgen?
Best 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:
<code class="language-C#"> using (CancellationTokenSource tokenSource = new CancellationTokenSource()) { Task.Run(() => { }, tokenSource.Token); }</code>
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:
<code class="language-C#"> Task.Run(async () => { try { // 任务代码 } finally { tokenSource.Dispose(); } }, tokenSource.Token);</code>
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:
<code class="language-C#"> CancellationTokenSource tokenSource = new CancellationTokenSource(); Task.Run(() => { }, tokenSource.Token); // ... tokenSource.Dispose();</code>
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!