如何根据时间运行代码

时间:2013-10-19 22:01:00

标签: c# asmx

我有点问题。我找不到合适的标题,对不起

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

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

3 个答案:

答案 0 :(得分:2)

如果你对在不同的线程中执行的代码没问题,你可以使用你想要的任何库(在这种情况下是Rx),我个人更喜欢这种方法:

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

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

有些注意事项:

  1. 如果提供的时间是过去,事件将立即发生。
  2. 该事件将在后台线程中执行。您可以通过提供调度程序来控制它运行的线程,但这有点复杂,我更喜欢让我的代码线程安全,而不是试图控制哪些线程执行哪些代码块。
  3. 以下是一个完整的程序,可以举例说明这一点。您需要将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);
            }
        }
    }
    

答案 1 :(得分:1)

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

如果是Web应用程序,则可以使用cron作业。请查看以下链接:Creating Cron Jobs in C#

答案 2 :(得分:1)

使用在适当的时间间隔内打勾的计时器控件。 在任何时候刻度将当前时间与数据库中的时间进行比较。 您需要考虑差异。例如,如果它以0.1秒,1.1秒,2.1秒为单位,则数据库中的时间为1秒。 您必须找到适当的方法来解释这些差异。