Прочная функция для более быстрого выполнения

#azure-functions #breadth-first-search #azure-durable-functions

#azure-функции #широта-первый-поиск #azure-долговечные-функции

Вопрос:

Я пытаюсь узнать о функции, которая использует план потребления (10 минут) для возврата узлов до n уровней:

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

Ввод:

 [  {  "ids":  [  A  ],  "depth": 3  }, {  "ids":  [  B  C  ],  "depth": 1  }  

Выходные данные: A, B, C, D, E, F

(поскольку идентификатор A глубины 3 вернет A, B, C, D, E, F. Идентификатор B и C глубины 1 вернет B, C. После удаления дубликатов вывод будет A, B, C, D, E, F)

 [FunctionName(nameof(ChildEntitiesReaderFunction))]  public async Tasklt;Listlt;PersonEntitygt;gt; GetChildEntities([ActivityTrigger] ChildEntitiesReaderRequest request)  {  var childEntities = await GetChildEntitiesAsync(request.ParentEntity, request.SyncJob, request.Depth, request.OtherOrgLeaderIds);  return childEntities;  }   public async Tasklt;Listlt;PersonEntitygt;gt; GetChildEntitiesAsync(PersonEntity parentEntity, SyncJob syncJob, int depth, Listlt;stringgt; orgLeadersToExclude)  {  depth--;   if (parentEntity == null)  {  return await Task.FromResult(new Listlt;PersonEntitygt;());  }   var allEntities = new Listlt;PersonEntitygt; { parentEntity };  Listlt;PersonEntitygt; directChildEntities = null;  var oneCatalogTableName = await GetOneCatalogTableNameAsync(syncJob.RunId);   try  {  directChildEntities = await _oneCatalogTableService.ExecuteQueryAsync(oneCatalogTableName, $"PartitionKey eq '{parentEntity.PersonnelNumber}'", syncJob.RunId);  }  catch (Exception ex)  {   }   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);  }  }   // "Got {allEntities.Count} child entities for {parentEntity.PersonnelNumber}");   return allEntities;  }   

При запуске этой функции чтение дочерних сущностей занимает gt; 10 минут. Есть ли способ обновить эту логику для более быстрого выполнения?

Комментарии:

1. Вы должны предоставить более четкое и подробное описание проблемы, которую вы пытаетесь решить, и указать текущую производительность. вы не задавали вопроса, просто вставили код.