如果遇到以下场景:
- Thread0 正在运行调用其他组件的代码。
- Component0 被 Thread0 调用并触发一个事件。
- Eventhandler 尝试通过设置停止标志来停止 thread0
- 现在我通常会加入 Thread0 等到清理完所有东西并完成。但如果我这样做,我会造成僵局。所以可以说,我只是将退出完成 Thread0 的标志设置为 true 并返回到 Component0 事件的 Eventhandler。
- Eventhandler 的下一行尝试处理 Thread0 正在使用的资源。请记住:Thread0 仍在运行,因为我不能等待它,因为试图停止 Thread0 的事件处理程序是在 Thread0 的上下文中执行的。
- 现在 Eventhandler 已完成,Thread0 尝试使用先前处理的资源 > 导致未知行为。
目前,我在处理所有组件后立即要求标志是否已被处置。如果它被处理,我会中断退出线程。
是否有更好的模式来处理这种复杂的行为。