Разве бесконечный монитор на лазурных функциях не создает бесконечное количество повторов? - PullRequest
0 голосов
/ 08 мая 2019

Я изучаю лазурные и долговечные функции. Глядя на примеры для шаблона монитора:

https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-monitor

public static async Task Run(DurableOrchestrationContext monitorContext, ILogger log)
{
    MonitorRequest input = monitorContext.GetInput<MonitorRequest>();
    if (!monitorContext.IsReplaying) { log.LogInformation($"Received monitor request. Location: {input?.Location}. Phone: {input?.Phone}."); }

    VerifyRequest(input);

    DateTime endTime = monitorContext.CurrentUtcDateTime.AddHours(6);
    if (!monitorContext.IsReplaying) { log.LogInformation($"Instantiating monitor for {input.Location}. Expires: {endTime}."); }

    while (monitorContext.CurrentUtcDateTime < endTime)
    {
        // Check the weather
        if (!monitorContext.IsReplaying) { log.LogInformation($"Checking current weather conditions for {input.Location} at {monitorContext.CurrentUtcDateTime}."); }

        bool isClear = await monitorContext.CallActivityAsync<bool>("E3_GetIsClear", input.Location);

        if (isClear)
        {
            // It's not raining! Or snowing. Or misting. Tell our user to take advantage of it.
            if (!monitorContext.IsReplaying) { log.LogInformation($"Detected clear weather for {input.Location}. Notifying {input.Phone}."); }

            await monitorContext.CallActivityAsync("E3_SendGoodWeatherAlert", input.Phone);
            break;
        }
        else
        {
            // Wait for the next checkpoint
            var nextCheckpoint = monitorContext.CurrentUtcDateTime.AddMinutes(30);
            if (!monitorContext.IsReplaying) { log.LogInformation($"Next check for {input.Location} at {nextCheckpoint}."); }

            await monitorContext.CreateTimer(nextCheckpoint, CancellationToken.None);
        }
    }

    log.LogInformation("Monitor expiring.");
}
  1. Если это было изменено на бесконечный монитор?
  2. Не будет ли история роста контекста до того места, где он вызывает проблему?
  3. Правильно ли я понимаю, что всякий раз, когда один вызов ожидает CreateTimer, текущий метод ожидает, пока не будет достигнут таймер, но при запуске таймера также будет выполнен повтор?
  4. Что тогда в следующий раз, будет ли запущен начальный метод + 2 повторения?
  5. Что произойдет, если платформа переместит функцию на новый хост, затем отменит этот первоначальный метод и продолжит работу из-за воспроизведения на новом хосте?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...