【发布时间】:2013-10-10 18:51:14
【问题描述】:
我在任务和 Task.Factory 中遇到了这种特殊情况。这是我的一段代码。
public Task CreateAndStartSyncTask()
{
return Task.Factory.StartNew(async () =>
{
... do stuff ...
await Task.Delay(500);
... do more stuff ...
}
}
public void Synchronize()
{
var syncTask = CreateAndStartSyncTask();
syncTask.Wait(mTimeout);
switch(syncTask.Status) {
case TaskStatus.RanToCompletion:
// VICTORY!
break;
default:
throw syncTask.Exception;
}
}
所以我的问题是,当我运行这段精彩的代码时,我会在“......做更多的事情......”之前进入开关盒。然后任务继续运行直到完成。这不是我想要的功能,因为我真的希望完成任务。
话虽如此,鉴于它以同步方式处理,但我无法完全公开代码,我真的需要了解整个任务完成心态。
发生了什么事,我如何才能真正检查任务是否真的结束了?
【问题讨论】:
-
mTimeout的值是多少? -
将
await Task.Delay(500);替换为Task.Delay(500).Wait();会得到什么 -
mTimeout 约为 10.000。
-
Task.Delay(x).Wait();似乎解决了这个问题。我仍然想知道 Task.Delay 将任务的“IsCompleted”设置为 true 背后的逻辑是什么?
标签: c# windows-runtime task delay async-await