gpt4 book ai didi

c# - 如何中止 .NET 任务?

转载 作者:太空狗 更新时间:2023-10-29 21:46:44 25 4
gpt4 key购买 nike

情况是这样的,我正在编写代码 war 竞赛的框架。随着代码的运行,对于每一轮,它都会调用每个参赛者提供的库中的一个方法。比赛规则是方法必须在 1 秒内返回,否则我们将终止调用它们的任务。然后我们对该回合使用默认结果。

该方法不支持取消,因为我们不能相信调用的代码会响应取消。我们需要终止线程,因为如果我们有 10 或 20 个忽略的后台任务,那么所有继续进行的调用将在每次调用和方法上提供更少的时钟周期,之前花费不到 1 秒的时间现在需要更多。

从好的方面来说,我们正在终止的方法应该没有打开的资源等,因此中止不应留下任何挂起的东西。

更新:这里要记住两件事。首先,这就像一场游戏——所以性能很重要。其次,工作线程不太可能打开任何资源。如果其中一个被调用的方法运行时间过长,我需要中止它并快速继续。

最佳答案

您应该以低权限在自己的 AppDomain 中运行每个参赛者。这有几个优点:

  1. 它是沙盒化的
  2. 它不能与进程中的任何其他代码交互
  3. 强制卸载 AppDomain 相对干净。

即使您更喜欢终止线程而不是卸载 AppDomain,我仍然会将每个参赛者放入一个 AppDomain 中以实现隔离。

不幸的是 Thread.Abort 还不够。它仍然执行 finally 子句,可以根据需要执行所需的时间。

关于c# - 如何中止 .NET 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7053025/

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