我有一个功能,每秒更新数据库(因为一些网络连续数据)我想延迟更新功能..因为它将每5分钟更新数据库表..这是我的代码
if (ip==StrIp)
{
Task.Delay(300000).ContinueWith(_=>
{ //I'm Using Task.Delay to make delay
var res= from i in dc.Pins //LINQ Query
where i.ip== ip
select i;
for each (var p in res)
{
p.time= System.DateTime.Now,
p.temperature= temp,
.
. //some other values
.
};
datacontext.submitChanges();
});
}
它每5分钟工作一次并更新数据,现在我希望数据应该只在应用程序启动时第一次立即更新但之后应该每5分钟更新一次..但是现在我的代码没有这样做..如何我可以做出第一次忽略操作的延迟,但适用于即将进行的数据迭代......?提前致谢
您可以使用标志来确定它是否是第一次调用您的方法,例如:
private uint _counter = 0;
public YourMethod()
{
if (ip == StrIp)
{
Action<Task> action = _ =>
{
var res = from i in dc.Pins //LINQ Query
where i.ip == ip
select i;
//...
datacontext.submitChanges();
};
if (_counter++ == 0)
action();
else
Task.Delay(300000).ContinueWith(action);
}
}
将任务的内部逻辑提取到函数/方法中(自动重构VS或R#)并在开始和间隔调用新函数/方法。
我个人会进入另一个方向:
有一个内存中的队列,当数据进入你的应用程序时会被填满。然后我会有一个线程/任务等,每5分钟检查一次队列并相应地更新数据库。记得锁定队列以进行更新(并发)。 .Net的ConcurrentQueue是一种方法。