C# 如何在Orchestrator中处理多线程大数据?

C# 如何在Orchestrator中处理多线程大数据?,c#,azure,azure-functions,orchestration,azure-durable-functions,C#,Azure,Azure Functions,Orchestration,Azure Durable Functions,我在编排器中有以下代码: var parallelTasks = new List<Task>(); // Get Records List<Record> records = await context.CallActivityAsync<List<Record>>("GetRecords", orchestrationContext); // Write Records

我在编排器中有以下代码:

        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条记录,并且Orchestrator无法继续,因为CallActivityAsync返回的数据不能超过8mb

这也可能失败,因为它实际上会尝试为每次写入启动60000个活动

我是这样做的,所以Azure将使用多个线程向ADL写入。起初我尝试使用信号量,多个在线来源告诉我不应该使用Sempahores,而应该使用CallActivityAsync,这将允许Azure管理自己的线程

如何解决这个问题并实现对ADL的多线程写入


对于记录,我使用的库一次只能写入一个文件,我知道MS的新库包含批量写入,但由于不同的原因,我无法使用该库。

GetRecords和WriterRecord是否有理由处于持久功能设置中?否则,GetRecords可以将序列化为JSON的每个记录对象放到Azure队列/EventHub中,而不是返回一个巨大的列表。然后可以从该队列/EventHub触发WriterRecords来处理每条消息。

在我看来,您的GetRecords应该以块的形式返回数据。不确定azure功能是否适合您的要求。函数的作用是什么?其他服务可以更高效地传输大量数据。这是我将要采取的方法。听起来很合理,应该有用。