azure - 天蓝色功能上的无限监视器不会也产生无限量的回放吗?
问题描述
我正在学习天蓝色的功能和持久的功能。查看监视器模式的示例:
https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-monitor
public static async Task Run(DurableOrchestrationContext monitorContext, ILogger log)
{
MonitorRequest input = monitorContext.GetInput<MonitorRequest>();
if (!monitorContext.IsReplaying) { log.LogInformation($"Received monitor request. Location: {input?.Location}. Phone: {input?.Phone}."); }
VerifyRequest(input);
DateTime endTime = monitorContext.CurrentUtcDateTime.AddHours(6);
if (!monitorContext.IsReplaying) { log.LogInformation($"Instantiating monitor for {input.Location}. Expires: {endTime}."); }
while (monitorContext.CurrentUtcDateTime < endTime)
{
// Check the weather
if (!monitorContext.IsReplaying) { log.LogInformation($"Checking current weather conditions for {input.Location} at {monitorContext.CurrentUtcDateTime}."); }
bool isClear = await monitorContext.CallActivityAsync<bool>("E3_GetIsClear", input.Location);
if (isClear)
{
// It's not raining! Or snowing. Or misting. Tell our user to take advantage of it.
if (!monitorContext.IsReplaying) { log.LogInformation($"Detected clear weather for {input.Location}. Notifying {input.Phone}."); }
await monitorContext.CallActivityAsync("E3_SendGoodWeatherAlert", input.Phone);
break;
}
else
{
// Wait for the next checkpoint
var nextCheckpoint = monitorContext.CurrentUtcDateTime.AddMinutes(30);
if (!monitorContext.IsReplaying) { log.LogInformation($"Next check for {input.Location} at {nextCheckpoint}."); }
await monitorContext.CreateTimer(nextCheckpoint, CancellationToken.None);
}
}
log.LogInformation("Monitor expiring.");
}
- 如果换成无限显示器呢?
- 上下文的历史不会增长到导致问题的地方吗?
- 我是否正确,每当一个调用等待 CreateTimer 时,当前方法会等待直到计时器满足,但在计时器触发时也会执行重播?
- 那么下一次,是否有初始方法 + 2 次回放运行?
- 如果平台将函数移动到新主机会发生什么,然后它会取消该初始方法并由于在新主机上播放重播而继续吗?
解决方案
推荐阅读
- gunicorn - Uvicorn 和 Gunicorn+Uvicorn 有什么区别?
- python - 更便宜的元组循环
- c++ - 如何在 C++ 代码上运行 AutoHotkey 脚本?
- python - 在 Python 中,如何不断地启动 GUI,但让它不断地从数据库中获取数据以实时更新?
- amazon-web-services - 递归 AWS Lambda 函数调用 - 最佳实践
- python - 如果我将 tkinter 对象放在函数中,为什么 x 和 y 坐标不会与您单击的位置对齐?
- regex - 是否可以在不使用 OR 的情况下将两个正则表达式模式组合成一个?, 管道字符
- google-play-services - Google Play 知识产权政策;为什么他们实际上首先接受侵犯版权?
- visual-studio-code - 无法安装 VisualStudioCode 自定义主题 (.vsix)
- azure - 特定 Blob 存储的 Azure 事件主题筛选