0

我想在向程序发送取消时清理资源(例如删除订阅)(例如,在本地运行或停止程序时按 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 是在函数运行时触发还是可以随时触发?

如何在关闭前通过清理其他资源来优雅地关闭功能?或者有什么方法可以收听主机关机。

谢谢!

4

1 回答 1

0

这是因为当你点击ctrl+c主线程接收到信号时,决定停止调试器并等待计时器完成。

此外,日志将显示在终端中,但不会显示在输出窗口中。

对于正常关机,您可以从此处参考。

于 2021-08-06T10:52:41.220 回答