Я пытаюсь понять поведение Azure Durable Functions. В частности, о том, как воспроизводится функция Orchestrator. Я думал, что освоился, пока не нашел одно значение флага Context.IsReplaying, которое не имело для меня смысла.
Мой код очень "привет мир" -i sh. У него есть функция Orchestrator, которая вызывает две функции Activity одну за другой.
[FunctionName("OrchestratorFn")]
public static async Task<object> Orchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context,
ILogger log
) {
log.LogInformation($"--------> Orchestrator started at {T()}, isReplay={context.IsReplaying}");
string name = context.GetInput<string>();
string name1 = await context.CallActivityAsync<string>("A_ActivityA", name);
string name2 = await context.CallActivityAsync<string>("A_ActivityB", name1);
log.LogInformation($"--------> Orchestrator ended at {T()}, isReplay={context.IsReplaying}");
return new {
OutputFromA = name1,
OutputFromB = name2
};
}
[FunctionName("A_ActivityA")]
public static async Task<object> ActivityA(
[ActivityTrigger] string input,
ILogger log
) {
log.LogInformation($"--------> Activity A started at {T()}");
await Task.Delay(3000);
log.LogInformation($"--------> Activity A ended at {T()}");
return input + "-1";
}
[FunctionName("A_ActivityB")]
public static async Task<object> ActivityB(
[ActivityTrigger] string input,
ILogger log
) {
log.LogInformation($"--------> Activity B started at {T()}");
await Task.Delay(3000);
log.LogInformation($"--------> Activity B ended at {T()}");
return input + "-2";
}
В выводе консоли (я вырезал все, кроме вывода, где я регистрирую время), вот что я вижу:
[1/26/2020 12:56:40 PM] ------> DurableClient Function Running at 56.40.8424.
[1/26/2020 12:56:49 PM] ------> DurableClient Function END at 56.49.5029.
[1/26/2020 12:57:03 PM] ------> Orchestrator started at 57.03.7915, isReplay=False
[1/26/2020 12:57:04 PM] ------> Activity A started at 57.04.1905
[1/26/2020 12:57:07 PM] ------> Activity A ended at 57.07.2016
[1/26/2020 12:57:24 PM] ------> Orchestrator started at 57.24.8029, isReplay=True
[1/26/2020 12:57:40 PM] ------> Activity B started at 57.40.4136
[1/26/2020 12:57:43 PM] ------> Activity B ended at 57.43.4258
[1/26/2020 12:57:53 PM] ------> Orchestrator started at 57.53.1490, isReplay=True
[1/26/2020 12:57:59 PM] ------> Orchestrator ended at 57.59.0736, isReplay=False
Это «isReplay = False» в самой последней строке, которое я не могу объяснить. Почему это ? Разве isReplay не должен иметь значение «True»?
Я использую Microsoft. Azure .WebJobs.Extensions.Durable v2.1.1