Azure functions 在Azure持久功能活动中使用Task.Delay

Azure functions 在Azure持久功能活动中使用Task.Delay,azure-functions,azure-durable-functions,Azure Functions,Azure Durable Functions,像这样在Azure持久功能活动中使用Task.Delay可以吗 我正在轮询存储,以查找应该在20-30秒内到达的数据 while (requestAccepted && retryCount < 8) { object savedData = await DataManagementService.GetSessionData(processSessionId); if (savedData != null

像这样在Azure持久功能活动中使用Task.Delay可以吗

我正在轮询存储,以查找应该在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++;
        }
while(requestAccepted&&retryCount<8)
{
object savedData=wait DataManagementService.GetSessionData(processSessionId);
if(savedData!=null&&savedData.GetType().GetProperties().Any())
{
返回true;
}
等待任务延迟(时间跨度从秒(10));
retryCount++;
}

使用
上下文的函数计时器功能。CreateTimer
(已解释)仅适用于AzureOrchestration函数,而不适用于Activity函数

使用
Task.Delay()
是完全可以的,只要您愿意在函数等待时为死区时间付费,并且您知道它会在超时之前完成


但是,更好的选择是将
GetSessionData()
调用移动到活动函数中,将此轮询函数转换为orchestrator,以便可以将
Task.Delay()
替换为
context.CreateTimer()
,并通过
context.CallSubOrchestratorAsync()从主orchestrator调用它

使用
Task.Delay()
是完全可以的,只要您愿意在函数等待时为死区时间付费,并且您知道它将在超时之前完成


但是,更好的选择是将
GetSessionData()
调用移动到活动函数中,将此轮询函数转换为orchestrator,以便可以将
Task.Delay()
替换为
context.CreateTimer()
,并通过
context.CallSubOrchestratorAsync()从主orchestrator调用它

当然,我也考虑过按照您所描述但发现的CreateTimer支持超时场景而不是轮询场景的方式重构它。我可以将它进一步扩展到外部等待模式,但这对于我正在做的事情来说太迷人了;o) 当然,我也考虑过按照您所描述的方式重构它,但发现CreateTimer支持超时场景,而实际上不支持轮询场景。我可以将它进一步扩展到外部等待模式,但这对于我正在做的事情来说太迷人了;o)