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
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:
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:
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.
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%Tags und Links c#