Ich habe den folgenden Code in C#, VS2012, WPF 4.5. Meine Erwartung wäre, dass .ContinueWith
ausgeführt wird, nachdem die Aufgabe vollständig abgeschlossen wurde (das ist der ganze Zweck einer Fortführung, nicht wahr?)..Continue startet, bevor die Aufgabe abgeschlossen ist
Dies sollte einen Wert von 2 in finalResult
ergeben.
int myTestInt = 0;
Task task = Task.Factory.StartNew(async() =>
{
myTestInt = 1;
await Task.Delay(TimeSpan.FromSeconds(6));
myTestInt = 2;
}).ContinueWith(_ =>
{
int finalResult = myTestInt;
});
Tatsächlich wird finalResult
stattdessen der Wert 1 zugewiesen. So scheint es, als ob die Fortsetzung bereits auf der await
-Anweisung gestartet wurde.
Ist dies das beabsichtigte Verhalten? Fehle ich hier etwas? Kann ich nicht auf ContinueWith
starten, nachdem eine Aufgabe vollständig abgeschlossen ist?
Update:
Justins Antwort inspiriert mich nur folgendes zu überprüfen:
int myTestInt = 0;
Task task=Task.Factory.StartNew(async() =>
{
myTestInt = 1;
await Task.Delay(TimeSpan.FromSeconds(6));
myTestInt = 2;
});
task.Wait();
int result2 = myTestInt;
finalResult noch auf 1 gesetzt ist Gibt es keine Möglichkeit für eine Aufgabe zuverlässig zu warten, der await
s enthält abzuschließen ?
Ich denke, Sie sollten 'Task.Delay' direkt aufrufen - nicht mit dem' erwarten' Schlüsselwort. –
Sie werden feststellen, dass '_' ist eigentlich eine 'Task', die vollständig unterstützt, was Justin sagt ... –
In der Tat wird die Verwendung von Task.Delay (6) das erwartete Ergebnis erzeugen, wird aber nicht 6 Sekunden warten . Ich denke, es wäre genauso, die ganze Zeile zu löschen. –