Angenommen, es gibt eine Aufgabe, die ungefähr die folgenden Aktionen enthält:
%Vor%Und es gibt ziemlich ungeduldige Benutzer. Sie sehnen sich danach, meine Bewerbung sofort zu beenden. Sie wollen nicht warten, solange eine lange Aktion läuft.
Ich habe die Klasse Thread
verwendet und konnte alle meine Threads sofort abbrechen, indem ich den Befehl Abort()
aufruft.
Wie kann ich meine Aufgaben sofort abbrechen?
Danke.
Sie sehnen sich danach, meine Bewerbung sofort zu beenden. Sie wollen nicht warten, solange eine lange Aktion läuft.
Standardmäßig werden Aufgaben auf dem ThreadPool als Hintergrundaufgaben ausgeführt. Sie können die Anwendung sicher beenden, ohne sich um Hintergrundthreads zu kümmern.
Solange Sie Ihren Prozess beenden möchten, ist das kein Problem.
Beachten Sie, dass Thread.Abort () schnell aber nicht sicher war. Nicht einmal für eine beendende Anwendung, aber dann würde es selten ein echtes Problem verursachen.
Sie können nicht erzwingen, dass eine Aufgabe unkooperativ abgebrochen wird. Das unkontrollierte Abbrechen eines Threads ist unsicher und daher absichtlich nicht unterstützt.
Sie sollten stattdessen Ihre Do_something_over_a_long_period_of_time
-Aufrufe kündbar machen (d. h. übergeben Sie ihnen das Token, und machen Sie sie auch regelmäßig überprüfen).
BEARBEITEN: Wie in einer anderen Antwort erwähnt, können Sie die -Anwendung beenden, indem Sie sicherstellen, dass alle Vordergrund-Threads beendet sind. Aber Sie müssen sich darüber im Klaren sein, dass Ihre Aufgaben nicht unbedingt die Möglichkeit hatten, sauber zu beenden. Wenn sie Dinge wie das Schreiben von Dateien tun, möchten Sie vielleicht warten, bis die Löschung bemerkt wurde, um den permanenten Zustand nicht zu beschädigen.
Tags und Links c# multithreading task-parallel-library task