Как добавить дополнительные функции активности в функцию долговечности?

#azure-functions #azure-durable-functions

#azure-функции #azure-долговечные-функции

Вопрос:

введите описание изображения здесь

Я пытаюсь написать надежную функцию, чтобы узнать узлы до n уровней. Например, если уровень = 3, выход должен быть A, B, C, D, E, F. Кроме того, уровень 1 может включать большее количество узлов.

Вот мой код:

 public async Tasklt;Listlt;stringgt;gt; ProcessQueryAsync([OrchestrationTrigger] IDurableOrchestrationContext context)  {  var request = context.GetInputlt;gt;();   var rootIds = request.Ids;  var entities = new Listlt;PersonEntitygt;();     var rootTasks = GetRootTask(context, rootIds, request); -gt; gets all nodes on level 1  var allRootEntities = await Task.WhenAll(rootTasks);   if (level != 1)  {  var childrenTasks = GetChildrenTask(context, allRootEntities, request, level);   var allChildrenEntities = await Task.WhenAll(childrenTasks);   entities.AddRange(allChildrenEntities);  }  else  {  entities.AddRange(allRootEntities);  }   }    private Tasklt;Listlt;PersonEntitygt;gt;[] GetChildrenTask(IDurableOrchestrationContext context,  RootEntity[] allRootEntities,  SyncJob syncJob,  int level)  {  var managerTaskCount = 0;  var entityTasks = new Tasklt;Listlt;PersonEntitygt;gt;[allRootEntities.Length];   foreach (var parent in allRootEntities)  {  var otherParentEntities = allRootEntities.Select(entity =gt; entity.PersonnelNumber).ToList()  .Except(new string[] { parent.PersonnelNumber }).ToList();   entityTasks[managerTaskCount  ] = context.CallActivityAsynclt;Listlt;PersonEntitygt;gt;(  nameof(ChildEntitiesReaderFunction),  new ChildEntitiesReaderRequest  {  ParentEntity = parent,  SyncJob = syncJob,  Level = level,  OtherOrgLeaderIds = otherParentEntities  }); ;  }   return entityTasks;  }    // ChildEntitiesReaderFunction  var childEntities = GetChildEntitiesAsync(request.ParentEntity, request.SyncJob, request.Depth, request.OtherOrgLeaderIds);    public async Tasklt;Listlt;PersonEntitygt;gt; GetChildEntitiesAsync(PersonEntity parentEntity, SyncJob syncJob, int level, Listlt;stringgt; orgLeadersToExclude)  {  level--;   var allEntities = new Listlt;PersonEntitygt; { parentEntity };  Listlt;PersonEntitygt; directChildEntities = null;   directChildEntities = await _tableService.ExecuteQueryAsync();   var taskIndex = 0;  var readTasks = new Tasklt;Listlt;PersonEntitygt;gt;[directChildEntities.Count(x =gt; x.Childcount gt; 0)];  foreach (var child in directChildEntities)  {  if (orgLeadersToExclude.Contains(child.PersonnelNumber))  {  continue;  }   if (child.Childcount gt; 0 amp;amp; depth != 1)  {  readTasks[taskIndex  ] = GetChildEntitiesAsync(child, syncJob, depth, orgLeadersToExclude);  }  else  {  allEntities.Add(child);  }  }  var validTasks = readTasks.Where(task =gt; task != null).ToList();  if (validTasks.Count gt; 0)  {  foreach (var result in await Task.WhenAll(validTasks))  {  allEntities.AddRange(result);  }  }   return allEntities;  }   

Есть ли способ добавить больше действий, чтобы заставить детей выполнять это быстрее?