我想在向程序发送取消时清理资源(例如删除订阅)(例如,在本地运行或停止程序时按 ctrl+c)
但是,取消令牌似乎不起作用,没有记录任何内容。
下面是我的代码:
[FunctionName("MainFunction")]
public static async Task Run(
[TimerTrigger("0 */15 * * * *", RunOnStartup = true)] TimerInfo myTimer,
ILogger log,
CancellationToken cancellationToken)
{
try
{
cancellationToken.ThrowIfCancellationRequested();
cancellationToken.Register(() =>
{
log.LogWarning("stoppping timer function");
});
await Task.Delay(8000, cancellationToken);
List<dynamic> subscriptionList = await SendHttpReq(accessToken, cancellationToken);
}
catch (Exception ex)
{
log.LogWarning("Cancellation triggered");
}
}
我正在通过视觉工作室在本地对其进行测试。我在终端启动后将 ctrl+c 发送到终端,但未记录“停止计时器功能”,并且仅Exception thrown: 'System.Threading.Tasks.TaskCanceledException' in System.Private.CoreLib.dll
在程序结束时(即SendHttpReq
完成时)在 Visual Studio 的输出框中看到。
CancellationToken 是在函数运行时触发还是可以随时触发?
如何在关闭前通过清理其他资源来优雅地关闭功能?或者有什么方法可以收听主机关机。
谢谢!