C#、VS2012、WPF 4.5に次のコードがあります。 私の期待は、タスクが完全に終了した後に.ContinueWith
が実行されるということです(これは継続の目的全体ですね。)。。タスクが完了する前に開始します。
この結果、finalResult
に2の値が設定されます。
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;
finalResultがまだ1に設定されているが確実に完了するために、await
Sを含むタスクを待つ方法はありません?
あなたは 'await'キーワードを使わずに' Task.Delay'を直接呼び出すべきだと思います。 –
'_'は実際にはJustinが何を言っているかを完全にサポートする' Task 'です... –
実際には、Task.Delay(6)を使用すると期待される結果が得られますが、6秒待たないでしょう。私はライン全体を削除するのとほぼ同じだろうと思う。 –