【发布时间】:2011-08-13 20:21:42
【问题描述】:
情况是这样的,我正在编写代码战竞赛的框架。随着代码的运行,对于每一轮,它都会调用每个参赛者提供的库中的一个方法。比赛的规则是方法必须在 1 秒内返回,否则我们会杀死调用它们的任务。然后我们使用该回合的默认结果。
该方法不支持取消,因为我们不能相信被调用的代码会响应取消。而且我们需要终止线程,因为如果我们有 10 或 20 个被忽略的后台任务,那么所有向前的调用将为每次调用提供更少的时钟周期,而以前花费不到 1 秒的方法现在需要更多。
从好的方面来说,我们正在杀死的方法应该没有打开任何资源等,因此中止不应该留下任何悬而未决的东西。
更新:这里要记住两件事。首先,这就像一场游戏——所以性能很重要。其次,工作线程不太可能打开任何资源。如果调用的方法之一过长,我需要中止它并快速继续。
【问题讨论】:
-
你不能杀死线程或任务(并期望保持稳定的应用程序)。
-
我同意这是个坏主意。不幸的是,在现实世界中,有时我们必须在没有好的解决方案时实施最不坏的想法。对于这种情况,您有什么建议?
-
标准答案是在单独的进程或 AppDomain 中启动代码。在这里询问并回答了许多计时器,我链接的骗子也不是最好的。
-
约翰 - 我妈妈教我在请求帮助时说谢谢。我担心妈妈会否决一切,所以我在提问时会以感谢和我的名字签名。
-
约翰 - 有趣的讨论。我绝对同意那里的少数人的观点,即谢谢你很好。由于不鼓励但不被禁止,我将继续这样做。
标签: c# .net task task-parallel-library abort