如何根据时间运行代码
本文关键字:运行 代码 时间 何根 | 更新日期: 2023-09-27 18:36:08
我有一点问题。我没有找到合适的标题,抱歉
我的数据库中有一个时间列,我想在currenttime==timeValueAtMyDatabase
时做一些事情(不重要)。如何?
if(currenttime==timeValueAtMyDatabase)
{
//do something
}
如果您对在不同线程中执行的代码感到满意,并且可以使用所需的任何库(在本例中为 Rx),我个人更喜欢这种方法:
Observable.Timer(timeToDoTheThing).Subscribe(codeToRun);
timeToDoTheThing
是代码应执行的时间,codeToRun
是到达该时间时将运行的代码(以采用一个长参数的 void 返回委托的形式)。
需要注意的一些事项:
- 如果提供的时间是过去的时间,则事件将立即发生。
- 该事件将在后台线程中执行。 您可以通过提供调度程序来控制它在哪个线程中运行,但这有点复杂,我更喜欢让我的代码线程安全,而不是试图控制哪些线程执行哪些代码块。
下面是一个完整的程序,可以举例说明这一点。 需要将 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 秒。您必须找到一种适当的方法来解释这些差异。