如何将两个任务集合链接在一起?
How to chain together two collections of Tasks?
我正在尝试 运行 一组任务,然后在这些任务完成后,运行 一个单独的任务集合。本质上,第一个任务集合负责写入某些数据库 table,最后一个任务集合将这些 table 中的数据整理成报告 table。
我正在使用的代码示例如下:
var dbWriteTasks = clients.Select(c => DoSomeWorkAsync(c)).ToArray();
var dbCollateTasks = clients.Select(c => DoSomeOtherWorkAsync(c));
Task.Factory.ContinueWhenAll(dbWriteTasks, t => dbCollateTasks.ToArray());
这是 运行 成功完成了第一组任务,但没有 运行 完成第二组任务,所以我显然做错了什么。
我也试过了,没用:
var dbWriteTasks = clients.Select(c => DoSomeWorkAsync(c)).ToArray();
var dbCollateTasks = clients.Select(c => DoSomeOtherWorkAsync(c)).ToArray();
Task.Factory.ContinueWhenAll(dbWriteTasks, t => dbCollateTasks);
这 运行 是两组任务,但第二组任务在第一组任务完成插入之前 运行 开始处理数据...
我还应该提到我已经尝试 运行 使用 Task.WaitAll
同步两组任务,但这也没有用。我正在尝试在 Azure 函数中执行所有这些操作,Task.WaitAll
只是导致它停止。
我是 TPL 的新手,如有任何建议,我们将不胜感激!
使用 await Task.WhenAll
而不是工厂方法。使用 await
可以无缝地创建读起来像同步代码的延续。
var dbWriteTasks = clients.Select(c => DoSomeWorkAsync(c))
var dbCollateTasks = clients.Select(c => DoSomeOtherWorkAsync(c));
await Task.WhenAll(dbWriteTasks);
await Task.WhenAll(dbCollateTasks);
我正在尝试 运行 一组任务,然后在这些任务完成后,运行 一个单独的任务集合。本质上,第一个任务集合负责写入某些数据库 table,最后一个任务集合将这些 table 中的数据整理成报告 table。
我正在使用的代码示例如下:
var dbWriteTasks = clients.Select(c => DoSomeWorkAsync(c)).ToArray();
var dbCollateTasks = clients.Select(c => DoSomeOtherWorkAsync(c));
Task.Factory.ContinueWhenAll(dbWriteTasks, t => dbCollateTasks.ToArray());
这是 运行 成功完成了第一组任务,但没有 运行 完成第二组任务,所以我显然做错了什么。
我也试过了,没用:
var dbWriteTasks = clients.Select(c => DoSomeWorkAsync(c)).ToArray();
var dbCollateTasks = clients.Select(c => DoSomeOtherWorkAsync(c)).ToArray();
Task.Factory.ContinueWhenAll(dbWriteTasks, t => dbCollateTasks);
这 运行 是两组任务,但第二组任务在第一组任务完成插入之前 运行 开始处理数据...
我还应该提到我已经尝试 运行 使用 Task.WaitAll
同步两组任务,但这也没有用。我正在尝试在 Azure 函数中执行所有这些操作,Task.WaitAll
只是导致它停止。
我是 TPL 的新手,如有任何建议,我们将不胜感激!
使用 await Task.WhenAll
而不是工厂方法。使用 await
可以无缝地创建读起来像同步代码的延续。
var dbWriteTasks = clients.Select(c => DoSomeWorkAsync(c))
var dbCollateTasks = clients.Select(c => DoSomeOtherWorkAsync(c));
await Task.WhenAll(dbWriteTasks);
await Task.WhenAll(dbCollateTasks);