c# – 等待System.Threading.Timer回调在退出程序之前完成

c# – 等待System.Threading.Timer回调在退出程序之前完成,第1张

概述我有一个List< System.Threading.Timer>.每个定时器以可配置的间隔触发(默认为10分钟).所有调用相同的回调方法(使用不同的参数).回调方法可能需要几秒钟才能完成它的工作. 当程序终止时,看起来执行回调方法立即停止(我正在看到正确?). 在退出程序之前,如何优雅地等待任何正在执行的回调方法来完成? 您可以使用WaitHandler参数处理所有计时器.只有当回调方法完成时, 我有一个List< System.Threading.Timer>.每个定时器以可配置的间隔触发(默认为10分钟).所有调用相同的回调方法(使用不同的参数).回调方法可能需要几秒钟才能完成它的工作.

当程序终止时,看起来执行回调方法立即停止(我正在看到正确?).

在退出程序之前,如何优雅地等待任何正在执行的回调方法来完成?

解决方法 您可以使用WaitHandler参数处理所有计时器.只有当回调方法完成时,这个处理程序将被发出信号(如规范所说:“定时器不会被处理,直到所有当前排队的回调已经完成.”)
voID WaitUntilCompleted(List<Timer> myTimers){    List<WaitHandle> waitHnd = new List<WaitHandle>();    foreach (var timer in myTimers)    {        WaitHandle h = new autoresetEvent(false);        if(!timer.dispose(h)) throw new Exception("Timer already disposed.");        waitHnd.Add(h);    }    WaitHandle.WaitAll(waitHnd.ToArray());}

编辑:@Peter强调dispose方法返回值的重要性.计时器已经处理时返回false.为了确保这个解决方案保持可靠,我修改了它,以便在Timer已经处理的时候抛出异常,因为我们无法控制这种情况,当它的回调结束时,尽管早期的处理回调可能仍在运行!

总结

以上是内存溢出为你收集整理的c# – 等待System.Threading.Timer回调在退出程序之前完成全部内容,希望文章能够帮你解决c# – 等待System.Threading.Timer回调在退出程序之前完成所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1239015.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存