Использование Task.Delay внутри действия функции Azure Durable

Можно ли использовать Task.Delay внутри действия функции Azure Durable?

Я опрашиваю хранилище на предмет данных, которые должны прибыть в течение 20–30 секунд или около того.

 while (requestAccepted && retryCount < 8)
        {
            object savedData = await DataManagementService.GetSessionData(processSessionId);

            if (savedData != null && savedData.GetType().GetProperties().Any())
            {
                return true;
            }

            await Task.Delay(TimeSpan.FromSeconds(10));

            retryCount++;
        }

Функция таймеров функций с использованием context.CreateTimer, объясняется здесь доступен только для функции Orchestration Azure, но не для функции Activity.


person puri    schedule 14.05.2019    source источник


Ответы (1)


Совершенно нормально использовать Task.Delay(), если вы счастливы оплачивать время простоя, пока функция ожидает, и вы знаете, что оно завершится до того, как истечет время ожидания.

Однако лучший вариант - переместить вызов GetSessionData() в функцию активности, преобразовать эту функцию опроса в оркестратор, чтобы вы могли заменить Task.Delay() на context.CreateTimer() и вызывать его из основного оркестратора через context.CallSubOrchestratorAsync().

person MarkXA    schedule 14.05.2019
comment
конечно, я также подумал о рефакторинге этого способа, как вы описали, но обнаружил, что CreateTimer поддерживает сценарий тайм-аута и на самом деле не выполняет сценарий опроса. Я мог бы расширить его до внешнего шаблона ожидания, но это слишком гламурно для того, что я делаю. ; о) - person puri; 16.05.2019