WebJobs SDK支持向函数传递CancellationToken
参数,SDK 使用该函数通知正在运行的函数主机关闭。我注意到,如果应用程序/功能被新版本替换,则不会通知正在运行的功能。如果函数被设计为运行更长的时间,这是一个问题,因为您最终可能会在不知情的情况下运行“旧”逻辑。
例如,如果您创建一个将永远运行(或直到取消)的简单函数:
using System;
using System.Threading;
public static async Task Run(string input, TraceWriter log, CancellationToken token)
{
while (!token.IsCancellationRequested)
{
token.ThrowIfCancellationRequested();
log.Info($"Input: {input}");
await Task.Delay(2000, token).ConfigureAwait(false);
}
}
如果您运行它,然后以某种方式更新代码并重新部署(或保存,如果您在 Azure Functions 门户中),您将看到该函数已重新编译,但正在运行的函数实例并未停止并将继续执行以前版本的代码,直到您手动禁用它。
是否有某种方法可以检测正在运行的函数中的重新部署?