当前位置: 首页 > 编程语言 > C#

C#计时器与服务中的线程共享

时间:2023-04-11 00:12:10 C#

C#计时器与服务中的线程我有一个服务,每10秒访问一次数据库并获取数据(如果有)。问题是处理这些数据最多可能需要30秒。如果我使用间隔为10秒的计时器,该服务将两次获取相同的数据。我想要实现的目标(仅用于可视化):while(true){if(Getnrofrows()>0)dostuffelsesleepfor10sec}PplsaysThread.Sleepisbadideainproductionservice,howcanIhowcanI定时器?/microphone您是否尝试过将Timer属性自动重置为false,并在使用System;刷新数据的过程结束时再次启用计时器?公共类PortChat{公共静态System.Timers.Timer_timer;publicstaticvoidMain(){_timer=newSystem.Timers.Timer();_timer.AutoReset=false;_timer.Interval=100;_timer.Elapsed+=newSystem.Timers.ElapsedEventHandler(_timer_Elapsed);_timer.Enabled=true;控制台.ReadKey();}staticvoid_timer_Elapsed(objectsender,System.Timers.ElapsedEventArgse){//做数据库刷新_timer.Enabled=true;我没有发现使用Sleep有任何问题,除了你可能会得到丑陋的代码。回答你的问题:publicclassMyTest{System.Threading.Timer_timer;publicMyTest(){_timer=newTimer(WorkMethod,15000,15000);}publicvoidWorkMethod(){_timer.Change(Timeout.Infinite,Timeout.Infinite);//暂停定时器//开始工作_timer.Change(15000,15000);//resume}}这种方法没有错。休眠线程不消耗任何CPU周期。如果您需要每隔X秒做一些事情,那么计时器就是您的不二之选。另一方面,如果你想暂停X秒,Thread.Sleep是合适的。Thread.Sleep本身在服务中并不坏,只是你需要响应服务命令,所以你的工作线程不应该睡一个小时,而是需要睡一小段时间,然后醒来并听服务的服务控制控制器部分告诉它由于某种原因停止。你想这样做是为了如果管理员告诉你的服务停止,它会停止得足够快,这样它就不会收到任何超时消息,管理员无法判断你的服务是否已停止并且可以安全地重新启动机器或类似的。以上就是C#学习教程:C#Timer以及服务中线程共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: