我有一个我在公司使用的CSV导入工具,一次导入10-20k记录,但可能需要几个小时,问题是应用程序连接到具有OAuth令牌的API一小时。
对我来说,这听起来像计时器的工作,但导入并需要oauth令牌的实际代码在模块中,因为我必须上传的每个供应商都有自己的映射到我们使用的api。因此我需要以编程方式查看是否已经过了3590秒(或50分钟),以便我可以刷新我的OAuth令牌。
有谁知道我怎么做到这一点?如果计时器不是最好的方法,你会建议用什么方式?
如果计时器具有我可以从其他对象访问的Elapsed属性(就像我可以与后台工作者一样),那就太好了。
答案 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