我在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秒。我认为删除整条线几乎是一样的。 –