我创建了一个看起来不错的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,该函数中的所有代码都会崩溃。
那是为什么?我究竟做错了什么?似乎在睡眠之后,协调器失去了局部变量的持久性。这伤了我的头。
有任何线索吗?