我有一个函数,我想让它运行给定的时间长度,然后,如果它没有自行退出,则中止。 执行此操作的最佳方法是什么?
我想到的最好的办法是在另一个线程中运行它,等待它超时,然后使用 Thread.Abort()
杀死它(如果该函数有错误类型的 catch
block )。另一种选择(我不知道如何实现)是某种带有 throw 的抢占式计时器。
还有更好的方法吗?某种简单的沙盒系统?
编辑:我将要运行的函数没有任何系统来检查它是否应该取消,而我不能(因为不能 ) 添加它。此外,这是一种测试工具,所以我将终止该功能的条件是它运行不正常。在那种情况下,我不能指望它能正确地做任何事情。
最佳答案
对于这样的事情可能有点矫枉过正,但您可以考虑是否要将托管该线程的任何内容加载到 AppDomain 中。 AppDomain 本质上是一个 .NET 沙箱。
如果线程进入杂草,您可以杀死 AppDomain。
关于.net - "Watch Dog"或 c# 中的沙箱系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1225689/