我知道有很多方法可以限制任务在.Net下运行多长时间,我想知道是否有其他的我错过了或者修改/改进了我以前使用过的方法。如何限制一个任务在.Net下运行的时间?
如果我不清楚方法的功能如何,我已经包含了一些问题。
现有的方法我所知道的虽然不一定用自己:
- 创建
Thread
,调查其完成一定时间然后杀死线程。这个解决方案并不是很好,因为它依赖于ThreadAbortException
的有些讨厌,如果我记得你不能保证你的代码将退出,即它可能会留下未使用的资源等。 - 使用
IAsyncResult
模式,问题在于你可以等待一定的时间,但是没有简单的方法来表示你希望中止请求,所以你必须依靠设置一个布尔标志(或类似的)来检查在异步代码中并导致它停止。这里的问题是,如果异步代码停留在代码的某个部分,它可能会在实际终止之前继续运行一段时间。 - 我经常看到人们推荐
BackgroundWorker
作为异步的东西,但你可以在ASP.Net下使用它(我假设是这样),它有一个简单的方法来终止异步过程一段时间后? - 使用.Net 4.0中的任务API(目前我所有的工作都被限制在.Net 3.5中,所以对我来说不是一个选项)。从快速阅读MSDN文档可以看出,您可以使用
CancellationToken
轻松取消任务,但取消操作的执行速度有多快,并确保调用任何finally
块。
所有的解决方案/建议/方法欢迎