C#每小时执行一次任务

时间:2014-02-24 16:55:25

标签: c# timer

我有一个我在公司使用的CSV导入工具,一次导入10-20k记录,但可能需要几个小时,问题是应用程序连接到具有OAuth令牌的API一小时。

对我来说,这听起来像计时器的工作,但导入并需要oauth令牌的实际代码在模块中,因为我必须上传的每个供应商都有自己的映射到我们使用的api。

因此我需要以编程方式查看是否已经过了3590秒(或50分钟),以便我可以刷新我的OAuth令牌。

有谁知道我怎么做到这一点?如果计时器不是最好的方法,你会建议用什么方式?

如果计时器具有我可以从其他对象访问的Elapsed属性(就像我可以与后台工作者一样),那就太好了。

2 个答案:

答案 0 :(得分:2)

您可以将其作为处理循环的一部分:

{
    DateTime lastReset = DateTime.Min;
    TimeSpan resetInterval = TimeSpan.FromMinutes(50);

    foreach (var whatever in enumerable)
    {
        if ((DateTime.Now - lastReset) > resetInterval)
        {
            ResetAuthToken();
            lastReset = DateTime.Now;
        }
        ProcessWhatever();
    }
}

答案 1 :(得分:1)

我建议你可以使用计时器的已用事件。这将基于间隔可能是50分钟等触发,您可以从Windows服务的配置文件中读取。

然后在计时器间隔中,您可以使用将用于后续API调用的Auth令牌更新全局变量[property]。

如果您只想让会话保持活动状态,您可以像itmse86所说的那样刷新令牌。但是,计时器已过时的事件对您来说很方便。

参考here