gpt4 book ai didi

c# - 是否存在像 Thread.OnAborting() 这样的事件?

转载 作者:太空宇宙 更新时间:2023-11-03 18:43:18 25 4
gpt4 key购买 nike

环境:

假设我有一个主应用程序:

  • 听取任务请求,
  • 一个接一个地执行那些任务(使用一些资源(在物理意义上)),
  • 必须能够立即停止挂起的任务以释放资源。

我有两个计时器:

  • timer1 时刻,应用程序正在检索新请求并将它们存储在 Queue 中,
  • timer2 节拍上,应用程序正在出列一个请求以在新的 Thread 中执行任务。

当用户要求停止所有任务以释放资源时,我打算使用 Thread.Abort() 简单地终止运行当前任务的线程。 .

问题:

我希望能够在从线程类中终止线程时保存一些最后的配置。

问题:

有没有办法检测线程何时被终止,比如 Thread.OnAborting() 事件?

或者也许我可以 catch ThreadAbortException在调用 Thread.Abort() 方法时引发? (如果是这样,我真的不知道该怎么做,你能提供一些代码示例吗?)

最佳答案

除了捕获 ThreadAbortException 外,不存在其他机制。当然,您真的不希望调用 Thread.Abort,因为 ThreadAbortException 是异步注入(inject)的,而且这些注入(inject)点是不可预测的。例如,它可能处于写入过程中,这可能会使整个 AppDomain 处于损坏状态。添加了 .NET 2.0 constrained execution regions这使得处理线程中止变得更安全、更容易处理,但是编写一段代码来保证 AppDomain 不会被破坏仍然难以置信困难。我的建议是押注 Thread.Abort 想法。

相反,您要做的是向线程发送一个信号并允许它自行正常终止。这可以通过以下机制来完成。

  • 投票一个标志
  • 使用等待句柄
  • 调用Thread.Interrupt
  • 使用内置于长时间运行操作的 API 中的取消机制

可以看到我的回答here获取更多信息。

关于c# - 是否存在像 Thread.OnAborting() 这样的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6763015/

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