C#、VS2012、WPF 4.5 に次のコードがあります。私の期待は.ContinueWith
、タスクが完全に終了した後に実行されることです (それは継続の全体的な目的ですよね?)。
これにより、 の値が 2 になるはずfinalResult
です。
int myTestInt = 0;
Task task = Task.Factory.StartNew(async () =>
{
myTestInt = 1;
await Task.Delay(TimeSpan.FromSeconds(6));
myTestInt = 2;
}).ContinueWith(_ =>
{
int finalResult = myTestInt;
});
実際にfinalResult
は、代わりに値 1 が割り当てられます。await
そのため、ステートメントの継続はすでに開始されているようです。
これは意図した動作ですか?ここで何か不足していますか?ContinueWith
タスクが完全に終了した後に開始することに頼ることはできませんか?
アップデート:
ジャスティンの答えは、次のことを確認するよう促しました。
int myTestInt = 0;
Task task=Task.Factory.StartNew(async () =>
{
myTestInt = 1;
await Task.Delay(TimeSpan.FromSeconds(6));
myTestInt = 2;
});
task.Wait();
int result2 = myTestInt;
await
finalResult はまだ 1 に設定されています。s を含むタスクが完了するのを確実に待つ方法はありませんか?