我对任务并行库中的 ContinueWith 似乎做了什么感到有点困惑。
我的理解是,在任务完成之前不应该调用它。如果我处于一个真正的循环中,则根本不应该调用它。
DateTime t = DateTime.Now.AddSeconds(10);
Task.Factory.StartNew(async () =>
{
while (true)
{
if (t < DateTime.Now) //after 10s throw
{
throw new Exception(); //I expect it to run the continuation here
}
Console.WriteLine("looped");
await Task.Delay(new TimeSpan(0, 0, 1));
}
}
).ContinueWith(ct => Console.WriteLine("Continued with: {0}",ct.Result.Status)) ;
我希望以下代码在抛出异常之前不会运行 ContinueWith 方法,但事实并非如此。相反,我得到以下输出:
looped
Continued with: WaitingForActivation
looped
looped
looped
looped
looped
looped
looped
looped
looped
为什么当我遇到第一个延迟时它会调用 ContinueWith?