如何在Azure持久函数中持久存储变量

时间:2020-06-18 04:12:59

标签: azure-functions azure-durable-functions

我创建了一个看起来不错的Azure Durable functions,但随后的一会儿循环使我头痛。

这是我的持久功能:

    [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变量是< strong> null ,并且由于为null,该函数中的所有代码都会崩溃。

那是为什么?我究竟做错了什么?似乎在睡眠之后,协调器失去了局部变量的持久性。这伤了我的头。

有任何线索吗?

0 个答案:

没有答案