Вышеуказанный код не является разветвленным, для разветвления необходимо создать все запросы активности сразу, а затем дождаться их завершения. Таким образом, план потребления будет продолжать порождать экземпляры до тех пор, пока вся работа не будет выполнена.
Попробуйте изменить свой код разветвления на что-то вроде этого:
var tasks = new List<Task>();
foreach (var contact in contacts)
{
tasks.Add(context.CallActivityAsync("ProcessContact", contact));
}
await Task.WhenAll(tasks);
Это создает 1 задание для каждого действия. связаться и поместить их в очередь для функции для обработки;затем он ожидает их завершения.
Как только вы увидите этот запуск, вы захотите посмотреть maxConcurrentActivityFunctions , в зависимости от того, насколько интенсивен процессор и т. д. ваша обработка может потребоваться только для обработки. скажем, 5 контактов параллельно в одном экземпляре.
Вы можете сначала попытаться установить это значение равным 1, а затем сказать 10 и посмотреть, какова разница в скорости, вы найдете больше контактов, которые у вас есть, и тем меньше maxConcurrentActivityFunctionsчем быстрее план потребления будет создавать новые экземпляры, но это может быть неэффективно с точки зрения скорости, поэтому вам необходимо найти баланс между оптимальным использованием одного экземпляра ЦП и maxConcurrentActivityFunctions.
Я рекомендую вам подключить это к Application Insightsэкземпляр, а затем посмотрите на Живые метрики, которые покажут вам такие вещи, как использование ЦП / памяти и количество создаваемых экземпляров.
Надеюсь, это поможет.