当程序终止时,看起来执行回调方法立即停止(我正在看到正确?).
在退出程序之前,如何优雅地等待任何正在执行的回调方法来完成?
解决方法 您可以使用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回调在退出程序之前完成所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)