我在C#,VS2012,WPF 4.5中有以下代码。 我的期望是,在任务完全完成后执行
事实上,
这是预期的行为吗?我有什么遗漏吗?我不能依赖于
更新:
Justin 的回答激发了我检查以下内容:
.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
在任务完全完成后才开始吗?更新:
Justin 的回答激发了我检查以下内容:
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
的任务完成吗?
Task.Delay
方法,而不使用await
关键字。 - Ioannis Karadimas_
实际上是一个Task<Task>
,这完全支持Justin所说的。 - Marc Gravell