Muster kündigung pferdebox

Dieses Muster bietet eine Möglichkeit, eine angegebene Prozessinstanz anzuhalten und alle damit verbundenen Aufgaben zurückzuziehen. Ist eine garantierte Kündigung erforderlich, so sollte die Durchführung der Aufgaben in Abbildung 27 dargestellt sein. Die Entscheidung, Aufgabe B abzubrechen, kann erst getroffen werden, nachdem sie aktiviert und vor dem Abschluss abgeschlossen wurde. Sobald diese Entscheidung getroffen ist, ist es nicht möglich, dass die Aufgabe weiter voranschreitet. Aus offensichtlichen Gründen ist es nicht möglich, eine Aufgabe abzubrechen, die nicht aktiviert wurde (d. h. es ist kein “Speicher” mit der Aktion zum Abbrechen einer Aufgabe in der Art und Weise verbunden, wie es für Trigger ist), noch ist es möglich, eine Aufgabe abzubrechen, die die Ausführung bereits abgeschlossen hat. Die allgemeine Interpretation des Abbruchaufgabenmusters wird in Abbildung 25 veranschaulicht. Der Trigger, der Aufgabe B aktiviert hat, wird entfernt, sodass die Aufgabe nicht fortgesetzt werden kann. Wenn eine Taskinstanz eine OperationCanceledException beobachtet, die vom Benutzercode ausgelöst wird, vergleicht sie das Token der Ausnahme mit dem zugeordneten Token (dem Token, das an die API übergeben wurde, die die Aufgabe erstellt hat). Wenn sie identisch sind und die IsCancellationRequested-Eigenschaft des Tokens true zurückgibt, interpretiert die Aufgabe dies als Bestätigen des Abbruchs und Übergänge in den Status Abgebrochen. Wenn Sie keine Wait- oder WaitAll-Methode verwenden, um auf die Aufgabe zu warten, legt die Aufgabe einfach den Status “Abgebrochen” fest. Um ein + Rating (direkte Unterstützung) oder ein +/- Rating (Teilunterstützung) zu erreichen, sollte das Produkt das entsprechende Bewertungskriterium des Musters erfüllen.

Andernfalls wird eine – Bewertung (keine Unterstützung) zugewiesen. Wenn Sie bereits zuvor einen Abbruch erlebt haben, haben Sie wahrscheinlich einige Arten dieser Ausnahmen bemerkt: TaskCanceledException und OperationCanceledException. TaskCanceledException leitet von OperationCanceledException ab. Das bedeutet, dass Sie beim Schreiben Ihrer Catch-Blöcke, die sich mit den Folgen eines abgebrochenen Vorgangs befassen, OperationCanceledException abfangen sollten. Wenn Sie TaskCanceledException abfangen, können Sie bestimmte Abbruchvorkommen durch Ihre Fangblöcke gleiten lassen (und möglicherweise Ihre App zum Absturz bringen). Wenn Sie die Kontrolle über StartSearchInternal() und Search(eHandle) haben, sollten Sie in der Lage sein, kooperative Stornierung mit ThrowIfCancellationRequested innerhalb Ihrer Search-Core-Schleife zu tun. Abbildung 27: Abbrechen des Aufgabenmusters mit garantierter Beendigung In einer Randnotiz sollten Sie wahrscheinlich einen Verweis auf die von Task.Factory.StartNew(() => StartSearchInternal(s.Token), s.Token) zurückgegebene Aufgabe irgendwo in Ihrer ViewModel-Klasse speichern. Sie möchten höchstwahrscheinlich das Ergebnis und jede Ausnahme, die es ausgelöst haben könnte, beobachten. Vielleicht möchten Sie Lucian Wischiks “Async re-entrancy, and the patterns to deal with it” überprüfen. Das Muster “Task abbrechen” bietet die Möglichkeit, eine Aufgabe zurückzuziehen, die aktiviert wurde oder bereits ausgeführt wird. Dadurch wird sichergestellt, dass die Ausführung nicht beginnt oder abgeschlossen wird.

Es ist auch ein gutes API-Muster, um Ihr CancellationToken als letzten Parameter zu behalten, den Ihre Methode akzeptiert. Dies passt sowieso gut zu optionalen Parametern, da sie nach allen erforderlichen Parametern angezeigt werden müssen. Dieses Muster wird bei den untersuchten Angeboten angemessen unterstützt.