У меня есть Azure оркестрация, где клиент оркестрации, который запускает оркестровку, выдал исключение тайм-аута.
Функция клиента оркестровки выполняет только две вещи, начиная две оркестровки, ожидая каждого в качестве примера кода Предлагаю.
await orchestrationClient.StartNewAsync("TableOrchestrator", updates);
await orchestrationClient.StartNewAsync("ClientOrchestrator", clientExport);
Однако, как я понимаю, клиент оркестрации не является специальной функцией, такой как функции оркестрации, поэтому он может работать не более 10 минут. Очевидно, существует высокая вероятность того, что общее время выполнения двух моих оркестровок в общей сложности превысит 10 минут.
Вопросы:
- Сохранено ли состояние клиента оркестровки как фактические функции оркестровки?
- Нужно ли ждать оркестрации, они не зависят от предыдущих результатов оркестровки?
Обновление Сделан полный пример того, что мой код делает, и время выполнения, как показано ниже.
Кажется, что начало оркестровки будет ждать его, если после него будет написан код, но не, если оркестровка является последним оператором!
Обновленные вопросы:
- Будет ли какой-либо код после вызова StartNewAsyn c () заставлять функцию ждать, пока оркестровка действительно не завершится? или, например, операторы журнала не будут запускать такое поведение?
- Рекомендуется ли при использовании кода StartNewAsyn c () вызываться только после выполнения всего другого кода?
.
public static class testOrchestration
{
[FunctionName("Start")]
public static async Task Start([TimerTrigger("0 */30 * * * *", RunOnStartup = true, UseMonitor = false)]TimerInfo myStartTimer, [OrchestrationClient] DurableOrchestrationClient orchestrationClient, ILogger log)
{
var startTime = DateTime.Now;
log.LogInformation(new EventId(0, "Startup"), "Starting Orchestror 1 ***");
await orchestrationClient.StartNewAsync("Orchestrator", "ONE");
log.LogInformation($"Elapsed time, await ONE: {DateTime.Now - startTime}");
await Task.Delay(5000);
log.LogInformation($"Elapsed time, await Delay: {DateTime.Now - startTime}");
log.LogInformation(new EventId(0, "Startup"), "Starting Orchestror 2 ***");
await orchestrationClient.StartNewAsync("Orchestrator", "TWO");
log.LogInformation($"Elapsed time, await TWO: {DateTime.Now - startTime}");
}
[FunctionName("Orchestrator")]
public static async Task<string> TestOrchestrator([OrchestrationTrigger] DurableOrchestrationContextBase context, ILogger log)
{
var input = context.GetInput<string>();
log.LogInformation($"Running {input}");
await Task.Delay(5000);
return $"Done {input}";
}
}
Запуск этого дает мне следующий вывод:
Starting Orchestror 1 ***
Elapsed time, await ONE: 00:00:08.5445755
Running ONE
Elapsed time, await Delay: 00:00:13.5541264
Starting Orchestror 2 ***
Elapsed time, await TWO: 00:00:13.6211995
Running TWO