对于初学编程者基本使用计时器来实现重复的做一件事情。但在对于一些数据库操作方面或者对时间要求比较高的情况下,使用计时器是会出现问题的。一个简单的例子是短信提交,如果从数据库中取出数据,然后提交到网关,在给数据库标识已经提交,这个过程必须严格控制时间,计时器的时间。但即使这样偶尔还是会出现多次重复提交的情况,最终导致整个过程混乱。如果在网络好的情况下,提交一次短信需要0.1秒,你的计时器设置时间为3秒,那么这样的情况下它会正常提交,且不会出错。如果你的网络不好,提交一次突然需要等待15秒,那么你这次的短信还没有提交完毕且给数据库标识为已提交,那么在这15秒之内,你这需要提交的数据将会重复提交5次左右,这还不是最糟糕的情况。最糟糕的情况是,发生这样的情况时,往往会导致你在往数据库回写状态是发生数据库死锁现象,你的状态回写失败了。那么你这次提交的内容几乎是无线次提交,从而带来巨大的损失。
要解决此种情况个人建议使用多线程来解决。即另外开辟一个永远循环(需要的情况)的线程来重复提交数据,这样可以解决上面的情况发生。只有当一次执行完成之后才会去执行第二次。为了保证线程不会被终止,需要对执行提交的代码使用try-catch来保证一次提交出错,还是会进行第二次。至于需要停止线程,方法很多,可以去探索,提示:使用一个标识来控制循环即可。需要注意的是每次执行完成之后最后使用Thread.Sleep(3000)来等待其他程序的执行。
时间: 2024-10-29 19:07:24