Я создал 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
, и из-за нулевого значения весь код этой функции вылетает.
Почему? Что я делаю не так? Похоже, что после сна оркестратор потерял персистент локальных переменных. Это разбивает мне голову.
Есть подсказка?