定时器可以提早吗?

2024-04-06

显然,System.Threading.Timer 回调应该会延迟一点。然而,可以提前调用吗?

例如,如果您启动秒表并安排计时器在 1000 毫秒内运行回调,那么秒表是否有可能在回调中显示 999?或者我们可以指望它必须显示 1000 或更多吗?

public sealed class EarlyTiming : IDisposable
{
    public EarlyTiming()
    {
        stopwatch = new Stopwatch();
        stopwatch.Start();

        timer = new Timer(TimerCallback, null, 1000, Timeout.Infinite);
    }

    public void Dispose()
    {
        timer.Dispose();
    }

    private readonly Timer timer;
    private readonly Stopwatch stopwatch;

    private void TimerCallback(object state)
    {
        var elapsedMs = stopwatch.ElapsedMilliseconds;

        if (elapsedMs < 1000)
            Console.WriteLine("It was early! (" + elapsedMs + " ms)");

        try
        {
            stopwatch.Restart();
            timer.Change(1000, Timeout.Infinite);
        }
        catch (ObjectDisposedException) { }
    }
}

None

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

定时器可以提早吗? 的相关文章

随机推荐

  • 如何检测flutter webview中内部html何时发生变化

    我在用着webview flutter https pub dev packages webview flutter要从 Flutter 应用程序上的 URL 查看页面 我需要做的是检测 HTML 代码中何时发生更改 而不更改 URL 因为
  • 在 Swift 中的一处导入整个项目的框架?

    我自己做了一个Cocoa Touch Framework 并且我只想将其导入到代码中的一处 在 Xcode Objective C 的早期版本中 有一个中心位置位于Supporting Files 它如何适用于基于 Swift 的项目 创建
  • 将 JSON 查询条件转换为 MongoDB/Mongoose 操作

    我正在客户端使用 Angular 8 构建一个应用程序 在服务器端使用 NodeJS 12 和 MongoDB 4 Mongoose 5 构建一个应用程序 我有一个由以下生成的查询角度查询构建器模块 https www npmjs com
  • 对列表中的 Erlang 记录进行排序?

    我在erlang中有一条记录 record myrec id 0 price 0 quantity 0 然后 我有一个记录列表 我想按 id 和价格按降序和升序排序 其中价格是第一个键 如果两个记录具有相同的价格 我想按 id 对它们进行排
  • 声明一个元素数量为 0 的数组仍然可以存储值

    我知道使用负索引纯粹是运气 但出于好奇我尝试了这个 我知道你可以声明 array 0 就像 malloc 0 一样 是合法的 但是我为什么可以在 array 0 中存储一个值呢 include
  • 使用 Instagram Basic Display API 时出现“无效平台应用程序”错误

    我正在尝试使用 Instagram Basic 显示 API 但是当我发布授权代码以获取访问令牌时 我不断收到以下错误 有人能帮我解决这个问题吗 Error error type OAuthException code 400 error
  • 跳出嵌套循环

    如果我有一个嵌套在另一个循环中的 for 循环 我怎样才能以最快的方式有效地退出两个循环 内部和外部 我不想使用布尔值 然后不得不说转到另一个方法 而只是执行外循环之后的第一行代码 有什么快速又好的方法可以解决这个问题 我认为异常并不便宜
  • 如何在 Visual Basic 2012 中对日期使用 BindingSource.Filter?

    我正在尝试过滤我的数据库以显示从我表单上的日历中选择的日期的所有预订 这是我写的代码 Public selDate As DateTime Dim response As Integer Public Sub FilterBooking s
  • Angularjs jquery UI 自动完成

    我正在尝试在 Angular 指令中实现 jquery 的自动完成功能 我收到的源数据来自 websocket 响应 它不起作用 我认为响应延迟导致了这里的问题 如果有人能解释下面的代码 我将不胜感激 是否有任何优雅的技术可以使用某种请求
  • 创建新的 django 项目时出现 Pydev 错误

    每次我使用钛 eclipse 和 pydev 创建一个新的 django 项目时 我都会收到此错误 实际上 它确实创建了文件settings py 我想知道是什么导致了这个错误以及如何修复它 这实际上是 Django 1 4 的 PyDev
  • 枚举程序集的所有已安装版本(在 GAC 中)

    是否可以使用 C 枚举 GAC 中程序集的所有已安装版本 例如 我有一个名为 My Assembly 的程序集 该程序集可能有各种版本 1 0 0 0 2 3 4 5 0 1 2 4 等 并且可以针对各种平台 x86 x64 任何 CPU
  • HTML 输入不更新值

    我有一个非常奇怪的问题 至少对我来说 我动态创建文本框 效果很好 但问题是 当我尝试写入这些内容时 如果我检查 html 代码 我写入的值不会出现 我不知道为什么会发生这种情况 也不知道如何解决这个问题 这是我的代码示例 ul class
  • 如何重置reactiveValues?

    重置单个无功值只需通过reactiveVal NULL 然而怎样才能彻底重置reactiveValues 虚拟应用程序包含我的一些方法来保留新鲜和干净的反应值 但它们都没有真正做到我希望它们做的事情 此外 观察时似乎有一种奇怪的行为reac
  • Geotools:wgs84 中缓冲区的边界框

    我需要一个 Java 函数来生成缓冲区周围的边界框 矩形 缓冲区由中心点 WGS84 坐标 和半径 以米为单位 定义 在 ITS 中获取缓冲区的边界框似乎非常简单 Point center Geometry boundingBox cent
  • jQuery 无法识别动态添加的 HTML

    阅读这里的其他一些内容 这个类似的问题 但我不确定如何将其应用于我的困境 我有一个 jquery 函数可以替换列表中的一些 HTML 例如 在函数运行之前 ul li blah blah blah li li blah blah blah
  • 如何在 R markdown SQL 块中使用 SQL 参数

    在 Rmd SQL 代码块中包含参数的正确方法是什么 这是一个 Rmd 文件示例 title Rmd Example output html document df print paged pdf document default r Sy
  • 如果 spring.mail.host 不在 application.properties 中,则 JavaMailSenderImpl 自动装配错误

    我在使用 JavaMailSenderImpl 在 Spring Boot 应用程序中发送电子邮件时遇到了一些 问题 我正在尝试动态设置所有属性 我希望将来从数据库中读取它们 但是 由于我不知道的原因 自动装配 JavaMailSender
  • Excel进程的最大数量?

    如果我这样做 例如 for int i 0 i lt 22 i var app new Excel Application 然后创建22个excel进程 但是 如果我这样做 for int i 0 i lt 25 i var app new
  • java中的DAO模式什么是业务对象

    直接来自this http www oracle com technetwork java dataaccessobject 138824 htmlOracle 关于 J2EE DAO 模式的文章 事实上 除了业务对象 参与者 他们这么称呼
  • 定时器可以提早吗?

    显然 System Threading Timer 回调应该会延迟一点 然而 可以提前调用吗 例如 如果您启动秒表并安排计时器在 1000 毫秒内运行回调 那么秒表是否有可能在回调中显示 999 或者我们可以指望它必须显示 1000 或更多