我有一个Durable Function App(.NET 7独立工作器),其中我在Orchestrator中运行了一个Foreach循环,以使活动函数以以下方式并行运行:

 foreach (var item in itemList)
 {
     itemIndex++; //sent to activity function to determine if a new file needs to be created as we're storing results in blob storage
     activities.Add(context.CallActivityAsync(Constants.FUNCTION_NAME, new activityInput
     {
         activityInput data
     }));
 }

await Task.WhenAll(activities);

每个活动功能的完成大约需要3分钟(大量的业务逻辑/数据库访问).随着我继续对函数进行压力测试并添加更多实例,运行时间随着运行的活动函数数量的增加而线性增加.因此,对于10个功能中的一个风扇来说,大约需要30分钟.根据运行所用的时间,它似乎不是并行运行的(或者可能是并行运行,但负载密集型导致速度变慢)?

活动函数的业务逻辑中是否有我遗漏或需要查找的内容,而这些内容可能会导致单个实例停止(如DB调用等)?

推荐答案

判断是否为持久函数设置了任何并发限制.在某些情况下,它可能导致活动按顺序运行,而不是并行运行.确保您的host.json或unction.json设置允许足够的并发性.

工作实例上的高资源利用率可能会减慢并行执行速度.

您是否可以使用Azure监视器和应用程序洞察来收集有关持久函数性能的更多洞察,尤其是其依赖项.这可以为诊断问题提供有价值的指标和跟踪.

https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-perf-and-scale#configuration-of-throttles

Csharp相关问答推荐

如何使用Automapper映射两个嵌套列表

如何从顶部提取发票号作为单词发票后的第一个匹配

如何在NServicebus中配置学习传输的文件夹(NService bus 8)

如果存在对CodeAnalysis.CSharp的引用,则不能引用netStandard2.0库

与C#中的Zip列表并行

System.Net.Http.HttpClient.SendAsync(request)在docker容器内的POST方法30秒后停止

附加标题不起作用,而添加则起作用

C#阻塞调用或await calling inside calling方法

如何注册类使用多级继承与接口

Linux Docker上的.NET6在某个时间抛出后,在加密操作期间发生System.Security.Cryptography.CryptographicException:错误

GODOT 4向C#中的字符串参数发送信号以等待

源代码生成器项目使用`dotnet build`编译,而不是在Visual Studio中编译?

使用ASP.NET MVC for Lemon Squeezy X-Signature创建散列

如何在C#中从MongoDB IPipelineStageDefinition中获取聚合命令的字段/选项?

如何使用.NET 8.0中新的CompositeFormat类?

并发表更新.EF核心交易

在Unity C#中按键点击错误的参数

C#;AvaloniaUI;MVVM;当另一个窗口上的按钮被单击时,如何更新视图图像源?

ASP.NET核心中的授权,如何在DbContext启动之前提供租用ID

如何提高C#中比较大 struct 的性能?