Как сохранить переменную в Azure устойчивых функциях - PullRequest
1 голос
/ 18 июня 2020

Я создал Azure Durable functions, который, кажется, работает нормально, но затем у меня есть некоторое время l oop, которое вызывает у меня головную боль.

Это моя долговечная функция:

    [FunctionName("Function1")]
            public static async Task<string> RunOrchestrator(
                [OrchestrationTrigger] IDurableOrchestrationContext context)
            {
                var output = string.Empty;

                bool resumed = false;

                var powerBIAuth = await context.CallActivityAsync<AzureAuthentication>("PowerBIAuthenticate", "");
                    // here generate the report
                    var response = await context.CallActivityAsync<ResponseRequestReport>("GenerateReport", powerBIAuth.access_token);
                    if(response != null)
                    {
                        response.token = powerBIAuth.access_token;

                        while (true)
                        {

//***PROBLEM HAPPENS HERE*****//
//***The second time it tries after the sleep, the response variable that I pass to the function is null.. why? *****//

                            response = await context.CallActivityAsync<ResponseRequestReport>("ReportStatus", response);

                            if(response.percentComplete == 100)
                            {
                                break;
                            }
                            // Orchestration sleeps until this time.
                            var nextCheck = context.CurrentUtcDateTime.AddSeconds(20);
                            await context.CreateTimer(nextCheck, CancellationToken.None);
                        }

                    }

                return output;
            }

Если вы видите код, первое, что происходит, - это ждать, пока я получу токен, затем я вызываю другую функцию для создания отчета, а затем делаю какое-то время, чтобы дождаться завершения отчета.

В первый раз, когда я проверяю статус, переменная response имеет значение, во второй раз, когда она пытается после сна, переменная response, которую я передаю функции ReportStatus, равна null, и из-за нулевого значения весь код этой функции вылетает.

Почему? Что я делаю не так? Похоже, что после сна оркестратор потерял персистент локальных переменных. Это разбивает мне голову.

Есть подсказка?

...