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延迟执行不是一个好主意。为什么不在第一次等待后移动整理任务初始化?