Azure functions Azure持久功能-状态即使在完成所有任务后仍在运行

Azure functions Azure持久功能-状态即使在完成所有任务后仍在运行,azure-functions,azure-table-storage,Azure Functions,Azure Table Storage,关于我先前的问题- 我使用HttpStart创建了一个持久作业,以便通过http请求(来自MSDN示例代码的代码)调用它 在我的持久工作中,我编写了逻辑来循环并调用活动触发器600次 公共静态异步任务运行( [OrchestrationTrigger]DurableOrchestrationContext(上下文) { var data=await context.CallActivityAsync(“XmlDeserialiser”); var tasks=新列表(); 对于(int i=0;

关于我先前的问题-

我使用HttpStart创建了一个持久作业,以便通过http请求(来自MSDN示例代码的代码)调用它

在我的持久工作中,我编写了逻辑来循环并调用活动触发器600次

公共静态异步任务运行(
[OrchestrationTrigger]DurableOrchestrationContext(上下文)
{
var data=await context.CallActivityAsync(“XmlDeserialiser”);
var tasks=新列表();
对于(int i=0;i<600;i++)
{
添加(context.CallActivityAsync(“规则1”,数据));
//添加(context.CallActivityAsync(“规则2”,数据));
//添加(context.CallActivityAsync(“规则2”,数据));
}
等待任务。何时(任务);
var result=tasks.Select(x=>x.result.ToList();
返回结果;
}
activitytrigger所做的只是延迟10毫秒,然后返回object

[函数名(“规则1”)]
公共静态异步任务运行(
[ActivityTrigger]BusinessRules.CustomerData(数据)
{
等待任务。延迟(10);
返回新的BusinessRules.RuleResponse()
{
IsValid=true,
RuleName=“规则1”
};
} 
这个练习背后的想法是我的持久功能应该为它接收的每个请求执行600个业务验证规则

当我使用600循环执行上述函数时,作业状态总是返回为“正在运行”。如果将循环计数更改为500,它将正常工作并返回结果。我在本地机器和Azure上进行了测试。在这两种环境中都是一样的。然而,在我的本地机器上,我发现作业已经完成,我可以在
返回结果的Durablefunction中找到调试点但状态始终显示为“正在运行”

看起来持久功能完成了作业,但由于某些原因,数据未登录到Azure存储表,因此状态仍在运行


请告知。

考虑到它适用于较小的数字,而不是较大的数字,我猜您遇到了一个问题,这是由于我们缺少数据。另一个用户打开了类似的问题,您可能会看到相同的症状

如果是,问题是此行返回的数据的大小:

var result = tasks.Select(x => x.Result).ToList();
序列化数据(序列化为JSON并作为UTF-32数据存储在Azure存储中)的大小不得超过64 KB。如果删除返回值或返回较小的值,编排器是否在600情况下完成


在短期内,我们计划通过在有人试图从函数返回太多数据时引发异常来解决这个问题。从长远来看,我们将添加对任意大返回值的支持。

这种行为是否相当一致?我想知道,如果我自己也试着解决同样的问题,这种可能性有多大。@ChrisGillum是的,它是相当一致的。我在本地和azure上多次尝试执行此操作。是的,消息大小是个问题。当我执行相同的操作并返回null时,效果很好。谢谢