gpt4 book ai didi

.net - 可能会跳过 `finally` 代码块的原因是什么?

转载 作者:行者123 更新时间:2023-12-03 12:57:01 24 4
gpt4 key购买 nike

我正在重构我的 Windows 服务,以便访问命名的 Mutex集中在工作线程的方法中。而不是在 OnStop() 中发布它和 ~DerivedService()它现在应该在 finally block 中释放。

我观察到,当我按下 Shift+F5 停止调试并预期崩溃(比礼貌地引发异常更严重)将是跳过 finally block 的唯一原因时,会跳过析构函数调用。

当我编写一个服务及其工作线程时,我希望在替换服务代码、登录和注销、附加调试器等的严格规范之前清除这里的任何令人讨厌的惊喜。

谢谢。

最佳答案

Windows 互斥体中有一个内置机制来处理程序或线程意外结束的情况,而不释放互斥体。如果当前持有互斥锁的线程退出,互斥锁将自动解锁,但处于特殊的放弃状态。

与其过多地关注清理工作,不如在获得互斥体并放弃其状态时制定一个特殊的例程。在这种情况下,您可能应该对 protected 资源进行一些额外的一致性检查 - 它可能处于任何状态。

关于.net - 可能会跳过 `finally` 代码块的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7868315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com