Not*_*ple 1 c# task-parallel-library async-await
我对任务并行库中的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)) ;
Run Code Online (Sandbox Code Playgroud)
我希望以下代码不会运行ContinueWith方法,直到抛出异常,但事实并非如此.相反,我得到以下输出:
looped
Continued with: WaitingForActivation
looped
looped
looped
looped
looped
looped
looped
looped
looped
Run Code Online (Sandbox Code Playgroud)
为什么在我遇到第一次延迟时会调用ContinueWith?
这是从返回的任务,Task.Factory.StartNew是Task<Task>因为你的拉姆达返回Task和拉姆达的线程池运行.lambda的结果包含在a中Task<T>并放入其Result属性中.
所以你需要打电话Unwrap或更好地使用Task.Run.
| 归档时间: |
|
| 查看次数: |
2059 次 |
| 最近记录: |