CancellationToken 不会在 Azure Functions 中触发

2024-04-16

我有这个简单的 Azure 函数:

public static class MyCounter
{
    public static int _timerRound = 0;
    public static bool _isFirst = true;

    [FunctionName("Counter")]
    //[TimeoutAttribute("00:00:05")]
    public async static Task Run([TimerTrigger("*/10 * * * * *")]TimerInfo myTimer, TraceWriter log, CancellationToken token)
    {
        try
        {
            log.Info($"C# Timer trigger function executed at: {DateTime.UtcNow}");
            if (_isFirst)
            {
                log.Info("Cancellation token registered");
                token.Register(async () =>
                {
                    log.Info("Cancellation token requested");
                    return;
                });
                _isFirst = false;
            }
            Interlocked.Increment(ref _timerRound);
            for (int i = 0; i < 10; i++)
            {
                log.Info($"Round: {_timerRound}, Step: {i}, cancel request:{token.IsCancellationRequested}");
                await Task.Delay(500, token).ConfigureAwait(false);
            }
        }
        catch (Exception ex)
        {
            log.Error("hold on, exception!", ex);
        }
    }
}

我想做的是在应用程序停止或发生代码重新部署(主机关闭事件)时捕获 CancellationToken 请求事件。

顺便说一句,我也尝试检查 for 循环中的 IsCancellationRequested 属性。永远不会变成真的。

主要要求是在功能部署期间不要丢失任何操作/数据,我想知道应用程序正在停止,以便在更新后主机再次启动时保留一些要处理的数据。


根据您的代码,我在我这边进行了测试,这是我的测试结果:

从上面的截图中我们可以发现,除了第一轮之外,后续轮次都无法处理取消回调。正如 Fabio Cavalcante 评论的那样,我删除了_isFirst逻辑检查发现它可以适用于所有回合,如下:

Note:我通过在触发 TimerTrigger 时禁用我的函数来模拟主机的关闭。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CancellationToken 不会在 Azure Functions 中触发 的相关文章

随机推荐

  • 将 mysql 转换为 mysqli [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我对 My
  • 如何使用 NavigationLink 在 SwiftUI 中创建文本(仅文本中的一些单词)

    我正在开发适用于 iOS 的 SwiftUI 应用程序 我想以这种方式格式化文本 其中蓝色单词应该是导航链接 文本应该如何显示 我知道可以将 UIKit 实现到 SwiftUI 代码中 但是 我不明白如何以这种方式使用 UIKit 和正常工
  • 休眠并删除所有

    最好的方法是什么删除 Hibernate 中表中的所有行 如果我迭代一个集合并调用session delete 据我所知 它的表现并不好 如果我使用其他选项session createQuery delete 它不会影响持久化上下文 如果没
  • 日志文件未使用 java 中的 log4j 更新/创建

    我正在尝试使用 Java 中的 log4j 捕获日志 该可执行文件位于Linux环境中 它显示日志消息 但是 它没有写入日志文件 我正在使用 log4j xml 这就是我到目前为止所拥有的
  • 使用 iScroll 会阻止键盘在我的设备上显示

    我正在使用 iScroll 来提供 iPhone 风格的滚动 但是 当单击文本框时 键盘不会显示 在尝试查找可能的原因时 我发现删除iScroll脚本 使其正常工作 但在这种情况下我错过了滚动功能 这是 iScroll 中的错误吗 如果是
  • 无法使用 Visual C++ 编译 allegro

    我刚刚下载了 allegro 库 我创建一个新的空项目 然后添加一个源文件 我添加这行代码 include
  • 安装多个 npm 版本

    是否可以安装多个版本npm对于我正在从事或正在从事的不同项目npm安装总是全局的 Windows 10 还尝试安装不同版本https github com marcelklehr nodist https github com marcel
  • Maven 提供的作用域可以传递吗?

    我有一个祖先依赖项 它具有所提供的依赖范围 我需要将该范围传播到依赖于我的项目的任何内容 例如 假设我有SomeProjectA这取决于SomeLibraryB 我需要确定范围SomeLibraryB已提供 目前编译任何依赖于SomePro
  • 设计用于库存控制的“EAV”或“类/具体表继承”数据库

    我正在为一个建设项目开发库存控制系统 店员负责添加新库存并将其分发给员工 从员工处返还 这些物品 以及它们的属性 将会非常多样化 例如钢制品 服装 设备 机械 工具等 我的问题是是否要去类 具体表继承 https stackoverflow
  • 核心数据对多关系在将对象添加到父实体时创建重复项

    我是 Core Data 和 Objective c 的新手 我正在开发一个项目 从 Web 服务获取 JSON 数据并将其与核心数据同步 我成功地遵循了这个tutorial http www raywenderlich com 15916
  • 用 Java JNA 编写的关键监听器。防止多次回调

    我使用以下代码来监听全局按键事件 Win32HookManager java import com sun jna Pointer import com sun jna platform win32 Kernel32 import com
  • 使用地图计算文本文件中出现的次数

    下面的代码将计算每个字符的出现次数 如果我在文本文件中有 abc 输出将是 a 1 b 1 c 1 我在许多网站上读到 for 循环将花费大量时间 最好使用哈希映射来实现相同的效果 你们中的任何人都可以帮我如何转换这个实现哈希映射的程序吗
  • 对c#的async/await控制流程感到困惑

    我正在学习 async await 并且对 wait 的解释感到困惑MSDN https learn microsoft com en us dotnet csharp language reference keywords await w
  • SSH 连接超时

    我正在尝试使用以下命令建立 SSH 连接golang org x crypto ssh我有点惊讶我似乎不知道如何超时NewSession函数 实际上我没有看到任何超时的方法 当我尝试连接到有问题的服务器时 它会挂起很长时间 我写了一些可以使
  • 您没有浏览服务器的权限?

    我将 kcfinder 与 ckeditor 一起使用 改变的同时disabled to false在 kcfinder 的配置文件中没有问题 但是用以下命令覆盖它 SESSION KCFINDER array disabled gt fa
  • EF Core 中的 AddRange 和 AddRangeAsync 有什么区别

    我正在使用 EF Core 插入条目 我注意到当我调试这行代码时context MyEntityDbSet AddRangeAsync records 加载需要一秒钟 而不是context MyEntityDbset AddRange re
  • 列族 ID 不匹配(发现为 cebcc380-72d4-11e7-9a6b-bd620b945799;预期为 c05d6970-72d4-11e7-9a6b-bd620b945799)

    我该如何解决这个错误列族 ID 不匹配 发现为 cebcc380 72d4 11e7 9a6b bd620b945799 预期为 c05d6970 72d4 11e7 9a6b bd620b945799 Caused by java uti
  • 按多个单词的主题标签拆分术语

    我正在尝试拆分包含多个单词的主题标签的术语 例如 I am great 或 awesome dayofmylife 那么我正在寻找的输出是 I am great awesome day of my life 我所能实现的就是 gt gt g
  • 如何使用java访问SVN中的文件

    我需要你的帮助 我想使用 java 代码从 SVN 打开一个文件 任何人都可以告诉我访问文件的流程 或者任何人都可以向我发送该文件的示例代码 任何人都可以向我发送使用java通过HTML访问svn的示例代码吗 你需要看看SVNKIT Jav
  • CancellationToken 不会在 Azure Functions 中触发

    我有这个简单的 Azure 函数 public static class MyCounter public static int timerRound 0 public static bool isFirst true FunctionNa