在Azure耐用功能活动中使用Task.Delay

时间:2019-05-14 13:31:42

标签: azure-functions azure-durable-functions

这样在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++;
        }

使用context.CreateTimer的功能计时器功能(已解释here)仅适用于Azure 编排功能,而不适用于活动功能。

1 个答案:

答案 0 :(得分:1)

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

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