Wer hat meine Aufgabe abgebrochen?

8

Meine C # Aufgabe wird abgebrochen, aber nicht von mir. Ich bekomme keinen Stacktrace und ich kann nicht herausfinden, wo das Problem auftritt.

Mein Aufgabenaufruf sieht folgendermaßen aus:

%Vor%

Ich möchte, dass die Fortsetzungsaufgabe ausgeführt wird, wenn die Aufgabe fehlerhaft war oder abgebrochen wurde, aber nicht, wenn sie ordnungsgemäß ausgeführt wurde. Die Fortsetzung wird nie ausgeführt.

Später fängt mein Programm eine AggregateException ab, die eine TaskCanceledException umschließt.

Meine andere wichtige Interaktion mit meinen Aufgaben besteht darin, WaitAny (taskArray, timeout) aufzurufen, bis ich keine weiteren Aufgaben mehr habe, dann WaitAll ohne Zeitüberschreitung aufrufen, bis die letzte Aufgabe erledigt ist.

Könnte WaitAny mit einem Timeout eine Stornierung verursachen? Warum wurde meine Fortsetzung nicht angerufen?

Dies ist nur mein zweiter Pinsel mit der Aufgabenbibliothek, also bin ich ahnungslos.

UPDATE:

Ich habe diese SO-Frage gefunden: Wie man den Status einer abgebrochenen Aufgabe in eine Fortsetzungsaufgabe übergibt. Ein Fehler in meinem Code oben (aber nicht die Ursache der Stornierung) ist, dass ich angenommen habe, dass der Status der Fortsetzungsaufgaben der gleiche wie der Status der ursprünglichen Aufgabe war. In der Tat müssen Sie etwas Arbeit tun, um die eine von der anderen zu bekommen, wie der andere Beitrag beschreibt.

UPDATE 2:

Brian: Danke für die Dokumentation. Ich hatte hoch und niedrig nach alternativen Ursachen für eine abgebrochene Aufgabe gesucht, aber diese Worte vermisst:

  

"Wenn Sie auf einen Task warten, der in den Status Canceled übergeht,   Eine Aufgabe (in eine AggregateException eingeschlossen) wird erstellt und ausgelöst.   Beachten Sie, dass diese Ausnahme eine erfolgreiche Stornierung anstelle von anzeigt   eine fehlerhafte Situation. Daher wird die Exception-Eigenschaft der Task zurückgegeben   null. "

    
Paul Chernoch 28.01.2013, 22:04
quelle

1 Antwort

14

Sie warten auf die Fortsetzung und da die ursprüngliche Aufgabe abgeschlossen war, wurde die Fortsetzungsaufgabe abgebrochen. Dieses Verhalten wird in der Dokumentation behandelt.

    
Brian Rasmussen 28.01.2013, 22:12
quelle

Tags und Links