C# 如何将两个任务集合链接在一起?

C# 如何将两个任务集合链接在一起?,c#,multithreading,azure,task-parallel-library,azure-functions,C#,Multithreading,Azure,Task Parallel Library,Azure Functions,我正在尝试运行一组任务,然后在这些任务完成后,运行一组单独的任务。基本上,第一组任务负责写入某些数据库表,最后一组任务将这些表中的数据整理成报告表 我正在使用的代码示例如下: var dbWriteTasks = clients.Select(c => DoSomeWorkAsync(c)).ToArray(); var dbCollateTasks = clients.Select(c => DoSomeOtherWorkAsync(c)); Task.Factory.Conti

我正在尝试运行一组任务,然后在这些任务完成后,运行一组单独的任务。基本上,第一组任务负责写入某些数据库表,最后一组任务将这些表中的数据整理成报告表

我正在使用的代码示例如下:

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函数中完成所有这些操作,而
任务。WaitAll
只会导致它停止


我对第三方物流比较陌生,所以任何建议都将不胜感激

使用
wait Task.whalll
代替工厂方法。使用
wait
可以无缝地创建读起来像同步代码一样的延续

var dbWriteTasks = clients.Select(c => DoSomeWorkAsync(c))
var dbCollateTasks = clients.Select(c => DoSomeOtherWorkAsync(c));

await Task.WhenAll(dbWriteTasks);
await Task.WhenAll(dbCollateTasks);

使用
wait Task.whalll
代替工厂方法。使用
wait
可以无缝地创建读起来像同步代码一样的延续

var dbWriteTasks = clients.Select(c => DoSomeWorkAsync(c))
var dbCollateTasks = clients.Select(c => DoSomeOtherWorkAsync(c));

await Task.WhenAll(dbWriteTasks);
await Task.WhenAll(dbCollateTasks);

所有的
ToList
ToArray
调用都是多余的。如果您想简化代码,那就不仅仅是重新排序顺序无关紧要的操作。
我正在尝试运行一组任务,然后在这些任务完成后,运行一组单独的任务
,因为这一要求,我相信第一个
wait
应该在
var dbCollateTasks=…
@KevinGossek纠正我的错误之前移动,但是
dbCollateTasks
在第二个
whalll
中枚举不同的查询之前不会运行。哦,真的,我的不好。不习惯于将IEnumerable与Tasks混为一谈虽然这是真的,但这样混淆代码并依赖IEnumerable延迟执行不是一个好主意。为什么不在第一次等待后移动整理任务初始化?所有的
ToList
ToArray
调用都是多余的。如果您想简化代码,那就不仅仅是重新排序顺序无关紧要的操作。
我正在尝试运行一组任务,然后在这些任务完成后,运行一组单独的任务
,因为这一要求,我相信第一个
wait
应该在
var dbCollateTasks=…
@KevinGossek纠正我的错误之前移动,但是
dbCollateTasks
在第二个
whalll
中枚举不同的查询之前不会运行。哦,真的,我的不好。不习惯于将IEnumerable与Tasks混为一谈虽然这是真的,但这样混淆代码并依赖IEnumerable延迟执行不是一个好主意。为什么不在第一次等待后移动整理任务初始化?