【问题标题】:Using timer in .Net Core for some scheduled task?在 .Net Core 中使用计时器来执行某些计划任务?
【发布时间】:2017-05-23 07:22:50
【问题描述】:

我在 startup.cs 文件中创建了一个计时器,如下所示:

public void ConfigureServices(IServiceCollection services)
{
//here i am reading value from appsettings.json
var timeForScheTask = Configuration.GetSection("TimeForScheduledTask");
var time = timeForScheTask.GetValue<string>("TimeToRun"); //it returns 09:00:00 PM

        AutoResetEvent autoEvent = null;
        autoEvent = new AutoResetEvent(false);
        tm = new Timer(Execute, autoEvent, 10000, 10000);
}

下面是定时器的Execute方法:

public void Execute(System.Object stateInfo)
    {
        if (_counter < 10)
        {
            //Console.WriteLine("Call #" + _counter);
            _counter++;
            return;
        }

        //Console.WriteLine("Final call");
        tm.Dispose();
    }

我只想在每天晚上 12:00:00 运行一些脚本/查询,我只是想知道在这行代码中应该做些什么,

        tm = new Timer(Execute, autoEvent, 1000, 1000);

而不是 1000,1000

通常我不使用 .net/ timer 来运行任何计划任务,但这次我只是在试验这个和那个 .net core,其中微软稍微改变了 timer 的东西。

提前致谢。

【问题讨论】:

  • 计时器用于短时间,而不是安排日常任务。例如,如果您的应用程序终止会发生什么?
  • 此外 - 问题是什么?你真的遇到问题了吗?你是什​​么意思“微软改变了计时器”?签名和往常一样。它从不在特定时间工作。它总是与间隔一起工作
  • “微软改变了计时器”我的意思是-adrientorris.github.io/aspnet-core/…
  • 至于具体的时间,我再说一遍,计时器不是用于安排日常任务。文档已经展示了如何在特定时间运行 - 只需计算当前时间和目标时间之间的时间跨度并将其作为 dueTime 参数传递,例如 DateTime.Today.AddHours(17) - DateTime.Now 将返回从现在到 17:00 之间的时间间隔
  • 如果您想为网站实现计划任务,请使用 HangFire 之类的库。应用程序池可以被回收,线程可以被中止。计时器可能会导致网络场上的多次执行。 Hangfire 负责所有这些工作,并为您的任务添加监控

标签: .net timer asp.net-core-mvc .net-core


【解决方案1】:

Timer 构造函数的第三个和第四个参数分别是到期时间和周期。

到期时间是您的回调 execute 方法运行之前的剩余时间。所以不要使用这个构造函数,而是使用带有四个参数的构造函数,而是使用带有单个参数的构造函数,即只有回调。

https://msdn.microsoft.com/en-us/library/ms149618(v=vs.110).aspx

然后创建一个方法,该方法接受当前日期时间 (DateTime.Now) 的参数,并计算 datetime.now 与您的要求 12:00:00 晚上之间的间隔。现在使用此方法获得的差异设置到期时间更改计时器的属性。

https://msdn.microsoft.com/en-us/library/yz1c7148(v=vs.110).aspx

另一个参数是周期性信号,如果您希望它是周期性的,请将间隔设置为您的周期。我认为在你的情况下它的一天。所以它将是 24*60*60*1000。如果要禁用它,请设置 Timeout.Infinite

【讨论】:

    猜你喜欢
    • 2021-07-10
    • 2018-05-06
    • 2011-10-11
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    相关资源
    最近更新 更多