如何根据时间运行代码

本文关键字:运行 代码 时间 何根 | 更新日期: 2023-09-27 18:36:08

我有一点问题。我没有找到合适的标题,抱歉

我的数据库中有一个时间列,我想在currenttime==timeValueAtMyDatabase时做一些事情(不重要)。如何?

if(currenttime==timeValueAtMyDatabase)
{
   //do something
}

如何根据时间运行代码

如果您对在不同线程中执行的代码感到满意,并且可以使用所需的任何库(在本例中为 Rx),我个人更喜欢这种方法:

Observable.Timer(timeToDoTheThing).Subscribe(codeToRun);

timeToDoTheThing是代码应执行的时间,codeToRun是到达该时间时将运行的代码(以采用一个长参数的 void 返回委托的形式)。

需要注意的一些事项:

  1. 如果提供的时间是过去的时间,则事件将立即发生。
  2. 该事件将在后台线程中执行。 您可以通过提供调度程序来控制它在哪个线程中运行,但这有点复杂,我更喜欢让我的代码线程安全,而不是试图控制哪些线程执行哪些代码块。

下面是一个完整的程序,可以举例说明这一点。 需要将 Rx-Main NuGet 包安装到项目中,才能针对 .NET 4+ 工作和生成。

using System;
using System.Reactive.Linq;
using System.Threading;
namespace Test
{
    public class Class
    {
        public static void Main()
        {
            var timeToDoTheThing = new DateTimeOffset(2013, 10, 19, 22, 19, 30, TimeSpan.Zero);
            Action<long> codeToRun = _ => Console.WriteLine("It is time.");
            Observable.Timer(timeToDoTheThing).Subscribe(codeToRun);
            Thread.Sleep(100000);
        }
    }
}

如果这是一个 Windows 窗体应用程序,则可以使用计时器并检查某些条目是否小于 DateTime.Now

如果是 Web 应用程序,则可以使用 cron 作业。查看以下链接:在 C# 中创建 Cron 作业。

使用按适当间隔滴答的计时器控件。在任何时候,将当前时间与数据库中的时间进行比较。您将需要考虑差异。例如,如果它在 0.1 秒、1.1 秒、2.1 秒处滴答作响,并且数据库中的时间是 1 秒。您必须找到一种适当的方法来解释这些差异。