Sagen wir, ich habe einen Prozessor, dessen Aufgabe es ist, Dateien auf der Festplatte zu speichern. Dies wird als Task
ausgeführt, während ein BlockingCollection<T>
für zu verarbeitende Dateien beobachtet wird.
Wenn die Aufgabe abgebrochen wird und es immer noch Dateien gibt, die auf der Festplatte gespeichert werden sollten, was wäre eine gute Übung dafür?
Es wäre bequem, die Aufgabe direkt vor dem Beenden zu verlassen, schreibt die verbleibenden Dateien zurück auf den Datenträger, obwohl ich nicht sicher bin, ob dies der Philosophie des Abbrechens einer Aufgabe widerspricht (da die Löschung so schnell wie möglich erfolgen sollte).
Eine andere Option ist eine zweite Prozedur nach dem Abbrechen der Aufgabe, deren Aufgabe es ist, die verbleibenden Dateien auf die Festplatte zu schreiben.
Codebeispiel:
%Vor%Ich weiß, dass dies eine offene Frage ist, die Anwendung / Anforderungen / Anzahl der zu schreibenden Dateien spielt ebenfalls eine Rolle, aber ich suche hier nach den allgemeinen Richtlinien / Best Practices.
Abbruch ist eine kooperative Aktion beim Arbeiten mit der Task Parallel Library und ja, Abbrechen Es wird empfohlen, eine schnelle Operation zu sein.
Denken Sie daran, dies ist eine Annullierung , keine Annullierung und Aufräumung . Wenn Sie zusätzliche Vorgänge ausführen müssen, die Sie als Ergebnis einer Stornierung ausführen müssen, sollten diese Vorgänge außerhalb der ursprünglichen Aufgabe erfolgen, die abgebrochen wurde.
Beachten Sie, dass Sie dadurch nicht daran gehindert werden, ContinueWith
aufzurufen und eine Operation auszuführen in einer neuen Task
welche überprüft, ob die Eigenschaft IsCanceled
% co_de zurückgibt % und führt dann die Bereinigung basierend darauf durch.
Der springende Punkt hier ist, dass Sie nicht das ursprüngliche true
, das abgebrochen wurde, blockieren wollen, aber Sie können ein neues Task
starten, um die Säuberung durchzuführen, die Sie als Ergebnis der Stornierung durchführen müssen .
Tags und Links .net c# task-parallel-library task