Repository navigation
DE CSharp Cancellation
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
CancellationTokenSource erstellt eine Stornierungsanforderung, CancellationToken wird an den Vorgang übergeben. Die Stornierung erfolgt kooperativ: Die Operation verifiziert den Token oder gibt ihn weiter. Das eingebettete Skript erhält Cancellation; WaitAsync wird zum Warten verwendet.
Speichern Sie dieses Beispiel separat als Example.csx. Führen Sie es unabhängig von den anderen Beispielen dieser Seite aus.
Example.csx:
Cancellation.ThrowIfCancellationRequested();
await WaitAsync(10);
UO.Print("Done");Der Abbruch ist kooperativ: Tokenprüfung und WaitAsync reagieren auf Stop; Fremdcode ohne Abbruchunterstützung kann weiterlaufen.
Ergebnis:
Done
for (int i = 0; i < 3; i++)
{
Cancellation.ThrowIfCancellationRequested();
await WaitAsync(100);
UO.Print($"Tick {i}");
}{
using var timeout = new CancellationTokenSource(TimeSpan.FromSeconds(1));
using var linked = CancellationTokenSource.CreateLinkedTokenSource(Cancellation, timeout.Token);
try
{
await Task.Delay(10, linked.Token);
UO.Print("Operation completed");
}
catch (OperationCanceledException) when (timeout.IsCancellationRequested)
{
UO.Print("Local timeout");
}
}Ersetzen Sie das Stoppen des Skripts nicht durch ein unendliches Abfangen OperationCanceledException. Ein willkürlicher blockierender Aufruf einer Bibliothek eines Drittanbieters wird nicht allein aufgrund des Vorhandenseins eines Tokens unterbrechbar. Das Anhalten und die Aufforderung zum Abbrechen haben unterschiedliche Zwecke: Durch das Anhalten bleibt die Fortsetzung erhalten, durch Abbrechen wird die Ausführung beendet.
Offizielle Dokumentation: Abbruch-, Pausen- und Hintergrundskripts – Microsoft Learn.
Der Löschungswunsch ist kooperativ. Task.Delay ohne Cancellation-Übertragung, Warten auf Drittanbieter-Aufgabe und Bibliotheksaufruf ohne Abbruchunterstützung können nach Drücken von Stop fortgesetzt werden. Sobald ein Stornierungsantrag gestellt wird, sind weitere Spielaktivitäten dieser Ausführung verboten; Dadurch wird kein .NET-Code dazu gezwungen, sofort beendet zu werden.
ClassicUO — Bad Newbie & C# Scripts IDE