首页 > 解决方案 > 如何使这种仅在第一次不适用于特定操作的延迟..但它应该稍后应用?C#

问题描述

我有一个每秒更新数据库的功能(作为来自某个网​​络的连续数据)我想延迟该更新功能..因为它会每 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#wpfvisual-studiodelay

解决方案


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

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

    }
}

推荐阅读