我有一个持久的功能协调器,它可以扇入多个活动功能来处理一些工作负载。以下代码是一个示例,其中Function_2是扇出来处理工作负载的那个:
public static async Task Run(DurableOrchestrationContext ctx)
{
// get a list of N work items to process in parallel
object[] workBatch = await ctx.CallActivityAsync<object[]>("Function_1");
var parallelTasks = new List<Task<int>>();
for (int i = 0; i < workBatch.Length; i++)
{
Task<int> task = ctx.CallActivityAsync<int>("Function_2", workBatch[i]);
parallelTasks.Add(task);
}
//How many instances of Function_2 will handle the workload?
await Task.WhenAll(parallelTasks);
// aggregate all N outputs and send result to Function_3
int sum = parallelTasks.Sum(t => t.Result);
await ctx.CallActivityAsync("Function_3", sum);
}
我的问题是,为了处理这项工作,会产生多少个Function_2实例。我知道这取决于任务的数量,所以假设我有5000个任务。我怀疑它会产生5000个实例,但是上限是什么,我可以控制它。我多次阅读文档,但无法找到有关此主题的信息。我知道根据定义,我不应该关心它,因为它是为我处理的,但是我的任务可以重载它们所依赖的后备资源。
答案 0 :(得分:4)
在幕后,每个CallActivity
调用都会成为存储队列中的消息,因此示例中会显示5000条消息。消息将由功能应用程序使用。
它将并行运行多个调用,但当然不是所有调用同时进行。您不会在文档中的任何位置看到确切的数字,因为它们将由内部比例控制器逻辑定义。它们还取决于每个活动调用的持续时间,CPU使用率等。
结果也可能随时间而改变。
所以,你的milage可能会有所不同,你应该测试你的场景。