第一次如何做出不适用于特定操作的延迟..但是应该稍后申请? C#

问题描述 投票:0回答:2

我有一个功能,每秒更新数据库(因为一些网络连续数据)我想延迟更新功能..因为它将每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分钟更新一次..但是现在我的代码没有这样做..如何我可以做出第一次忽略操作的延迟,但适用于即将进行的数据迭代......?提前致谢

c# wpf visual-studio delay
2个回答
1
投票

您可以使用标志来确定它是否是第一次调用您的方法,例如:

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);

    }
}

0
投票

将任务的内部逻辑提取到函数/方法中(自动重构VSR#)并在开始和间隔调用新函数/方法。

我个人会进入另一个方向:

有一个内存中的队列,当数据进入你的应用程序时会被填满。然后我会有一个线程/任务等,每5分钟检查一次队列并相应地更新数据库。记得锁定队列以进行更新(并发)。 .Net的ConcurrentQueue是一种方法。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.