繁体   English   中英

C#每小时执行一次任务

[英]C# performing a task every hour

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

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

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

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

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

你可以把它作为你的处理循环的一部分:

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

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

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

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

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

参考这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM