在通过策略轮询端点与使用具有持久功能的监视模式之间是否有一个甜蜜点?我将使用Azure Durable Functions docs中经过稍微修改的“监视”示例进行说明。在下面的示例中,可配置的秒数用于在两次检查之间等待。此外,持久功能要点检查和重播也有开销。
public static async Task Run(DurableOrchestrationContext ctx) {
int jobId = await ctx.CallActivityAsync<string>("StartJob", ctx.GetInput<MyData>());
int pollingInterval = GetPollingInterval();
DateTime expiryTime = GetExpiryTime();
while (ctx.CurrentUtcDateTime < expiryTime) {
var jobStatus = await ctx.CallActivityAsync<string>("GetJobStatus", jobId);
if (jobStatus == "Completed") {
await ctx.CallActivityAsync("SendAlert", machineId);
break;
}
var nextCheck = ctx.CurrentUtcDateTime.AddSeconds(pollingInterval);
await ctx.CreateTimer(nextCheck, CancellationToken.None);
}
}
如果在StartJob活动中启动的异步作业通常在一两秒内执行,那么真的值得为检查点和重播添加此开销,而不是在StartJob活动中以某种类型的退避进行轮询政策?