我在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到完成任務?
我想你應該直接調用'Task.Delay'而不是'await'關鍵字。 –
你會注意到'_'實際上是一個'Task',它完全支持Justin在說什麼...... –
事實上,使用Task.Delay(6)會產生預期的結果,但不會等待6秒。我認爲刪除整條線幾乎是一樣的。 –