Wie kann ich die Kraft einer Aufgabe Stornierung?
Davon ausgehen, es ist eine Aufgabe mit folgenden Aktionen rund:
Task someTask = new Task(() => {
while(!IsCancellationRequested) {
Do_something_over_a_long_period_of_time();
token.ThrowIfCancellationRequested();
Do_something_over_a_long_period_of_time();
token.ThrowIfCancellationRequested();
Do_something_over_a_long_period_of_time();
token.ThrowIfCancellationRequested();
}
});
someTask.Start();
Und es gibt ziemlich ungeduldig Benutzer. Sie sehnen sich nach beenden meiner Anwendung sofort. Sie wollen nicht, zu warten, während lange die Aktion läuft.
Nutzte ich die Thread
Klasse und war in der Lage, Abbrechen, alle meine threads sofort mit der Anrufung der Abort()
Befehl.
Wie kann ich Abbrechen, meine Aufgaben sofort?
Danke.
- Haben Sie sah BackgroundWorker?
- Wie würdest Hintergrund, Arbeiter, sein problem zu lösen. Es unterstützt Kündigung in ähnlicher Weise wie die Aufgaben
Du musst angemeldet sein, um einen Kommentar abzugeben.
Standardmäßig die Ausführung von Aufgaben auf der ThreadPool-als hintergrund-tasks. Sie können sicher die Anwendung zu beenden, ohne sich um hintergrund-threads.
So lange, wie Sie möchten, beenden Sie den Prozess, ist es kein problem.
Beachten Sie, dass Thread.Abort() war schnell, aber nicht sicher. Nicht einmal für eine Anwendung beenden, aber dann würde es selten zu einer echten problem.
Können Sie nicht zwingen, eine Aufgabe Abbrechen, die in einer unkooperativen Art und Weise. Abbruch der thread in einer unkontrollierten Art und Weise ist unsicher, und damit bewusst nicht unterstützt.
Sollten Sie Ihre
Do_something_over_a_long_period_of_time
Anrufe kündbar, statt (d.h. übergeben Sie das token, und machen Sie überprüfen Sie regelmäßig, ob auch).EDIT: Wie bereits in einer anderen Antwort, Sie können töten Anwendung nur, indem Sie sich alle Vordergrund-threads beendet sind. Aber Sie müssen sich bewusst sein, dass Ihre Aufgaben nicht unbedingt eine chance habe zu kündigen sauber. Wenn Sie Dinge zu tun, wie das schreiben von Dateien, können Sie auch wollen, zu warten, bis die Kündigung wurde bemerkt, beschädigen permanenten Zustand.
Do_something_over_a_long_period_of_time
vielleicht ein 3rd-party-Bibliothek aufrufen, die Sie nicht ändern können zu sein, sich kooperativ und Abbrechen können. Daher werden in der Lage, gewaltsam Abbrechen dieser Art von Aufgabe ist immer noch eine legitime realen Welt Voraussetzung. Ja, es zu töten-thread sein kann oder nicht sicher, je nachdem, welche Arbeit die Funktion tut (I/O etc), aber dennoch ist es eine beste Ansatz, um dies anderes als "Mach es nicht".fork
🙂