C # ContinueWith und Ergebnis der Aufgabe

8

Ich benutze diesen Code

%Vor%

Und ich bemerke, dass t.Result gleich 43 statt 86 ist. Wenn ich etwas in ContinueWith drucke, erscheint es in der Konsole. Warum wird das Ergebnis nicht durch ContinueWith geändert?

Mit freundlichen Grüßen

    
user3486941 01.04.2014, 21:35
quelle

3 Antworten

14

Das liegt daran, dass ContinueWith eine komplett neue Aufgabe erstellt, Ergebnis, das Sie ignorieren, und drucken Sie stattdessen das Ergebnis der ersten, die zu Recht 43 ist. Probieren Sie das folgende Snippet aus:

%Vor%     
Yuriy 01.04.2014 21:37
quelle
3

Die anderen zwei Antworten sind korrekt. Es gibt ein weiteres Task , das über ContinueWith zurückgegeben wurde. Wenn Sie sich nicht um jeden einzelnen Schritt kümmern, dann kann Ihr Code viel kleiner werden, indem Sie den Wert von ContinueWith nach dem Verketten zuweisen:

%Vor%

Sie werden feststellen, dass darauf viel aufgabenbasierter Code folgt. Es ist nicht oft so, dass Sie einzelne Task -Instanzen erstellen und starten, wenn Sie am Ende ContinueWith verketten.

    
Simon Whitehead 01.04.2014 21:45
quelle
2

ContinueWith erstellt eine neue Aufgabe, wenn die erste Ausführung des Tasks abgeschlossen ist, die den gleichen Thread verwendet oder nicht, da dies vom Taskplaner abhängt

Sie können ContinueWith<TResult>(Func<Task, TResult> ) in der Reihenfolge verwenden Holen Sie sich das Ergebnis der zweiten Aufgabe

Ihr Code sieht ungefähr so ​​aus

%Vor%     
BRAHIM Kamel 01.04.2014 21:38
quelle

Tags und Links