【发布时间】:2020-04-25 05:13:26
【问题描述】:
我在 Orchestrator 中有以下代码:
var parallelTasks = new List<Task>();
// Get Records
List<Record> records = await context.CallActivityAsync<List<Record>>("GetRecords", orchestrationContext);
// Write Records
foreach (Record record in records)
{
parallelTasks.Add(context.CallActivityAsync<int>("WriteRecord", record));
}
await Task.WhenAll(parallelTasks);
这失败了,因为 GetRecords 返回了太多数据(60000 条记录),并且由于 CallActivityAsync 无法返回超过 8mb 的数据,Orchestrator 无法继续。
这也可能会失败,因为它实际上会尝试为每次写入启动 60000 个活动。
我这样做是为了让 Azure 使用多个线程写入 ADL。一开始我尝试使用信号量,网上的多个消息来源告诉我,不应使用信号量,而应使用“CallActivityAsync”,这将允许 Azure 管理自己的线程。
如何解决这个问题并实现多线程写入ADL?
为了记录,我使用的库一次只能写入一个文件(我知道 MS 的新库包含批量写入,但由于不同的原因我无法使用它)。
【问题讨论】:
-
在我看来,您的 GetRecords 应该以块的形式返回数据
-
不确定 azure 函数是否适合您的要求。有什么功能呢?其他服务可以更高效地传输大量数据。
标签: c# azure azure-functions orchestration azure-durable-functions