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

标签 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.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);

关于c# - 如何将两个任务集合链接在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49308520/

相关文章:

c# - 响应.Write(对象)

c# - 解析 Lucene 查询语法并转义 CloudSearch

c# - 将 MDF 与 Entity Framework 核心结合使用

java - java平台下如何测量上下文切换所花费的时间

azure - 一次可以发布到服务总线主题的消息数

c# - 在 C# 中使用分隔符连接字节数组

C++ 线程安全累加器

c# - 双重检查 C# 中类成员的锁定

来自不同计算机的 Azure Bot 身份验证

azure - 如何使用Azure Powershell更改Azure WebApp的堆栈?