【问题标题】:Using timer vs Task parallel library使用计时器 vs 任务并行库
【发布时间】:2015-06-27 13:46:11
【问题描述】:

我正在编写一个 Windows 服务并使用 Timer 每分钟调用一个方法。 我有以下代码

protected override void OnStart(string[] args)
{
    // Set up a timer to trigger every minute.
    _timer = new System.Timers.Timer();
    _timer.Interval = 60000; // 60 seconds
    _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);

    _timer.Start();

}

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{           
    StartProcessingWorkFlow();
}

但是我想用任务并行库替换计时器?
我阅读了Task.Delay(),但它似乎只工作了 1 次。
我希望每 1 分钟调用一次代码,直到它停止。

【问题讨论】:

  • 听起来Timer 正是您所需要的。您仍然可以在Elapsed 事件中启动Task,但Timer 功能似乎非常适合您的需求...您有什么理由要删除计时器吗?
  • 不错的 sn-p,它很好地记录了您的问题:(
  • StartProcessingWorkFlow();是一种非常耗费资源的方法。所以我想利用 TPL 来使用多核。我想知道 TPL 是否有类似 TIMER 的东西。此外,如果需要,我可以传递取消令牌并停止处理。

标签: .net multithreading task-parallel-library c#-5.0


【解决方案1】:

可以在循环中使用 Task 来完成:

while(true){
    await Task.Delay(60000);
    StartProcessingWorkFlow();
}

但我认为这不是最好的方法。尝试寻找Rx.net

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多