考虑效率用定时器还是用异步延时

在实现每隔10秒处理耗时任务的需求时,作者对比了使用定时器和异步延时两种方法。定时器可能导致任务重叠,而异步方法确保任务休息10秒后才继续。文章讨论了异步延迟是否消耗更多资源及效率问题,并提出了使用标志判断任务状态来决定何时启动新任务的建议。各种实现方式如Task.Delay、ThreadPool和BackgroundWorker被提及,但强调逻辑清晰和符合人类思维是更重要的设计原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、有这么一个需求,我需要每隔10秒钟处理一件事情,比较耗时,可能会处理两三秒。
最开始,我是使用的定时器,定时10秒处理一次。
这就出现了一个问题,定时一次运行,运行两三秒之后结束,然后只过了六七秒,又再次启动了(定时器固定间隔10秒)
这还算简单的,还有一种可能,定时处理的代码,处理不止两三秒,甚至10秒都处理不完,定时器会再次启动,这时候运行了两个一样的逻辑,这个还不能用加锁处理,不然上一次代码运行完,锁一解开马上运行下一次,太坑。。。

后来我换了个想法,用异步:


async void Loop()
{
    while(true)
   {
          执行逻辑();
         Task.Delay(10*1000);
   }
}

搞了个死循环。
这个倒是可以了,执行一次不管用了十秒还是二十秒,下次启动都是在休息10秒后运行。。。
但是,我想知道,这个思路有没有问题。。。延迟10秒的时候,会不会消耗什么资源,会不会比定时器效率低很多。。

搞了个死循环。
这个倒是可以了,执行一次不管用了十秒还是二十秒,下次启动都是在休息10秒后运行。。。
但是,我想知道,这个思路有没有问题。。。延迟10秒的时候&

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值