使用线程来超时函数是一种好习惯吗?

时间:2014-02-28 07:34:03

标签: c# multithreading timeout

我们有一个打开文件的函数(文件是自定义.oxr文件)。问题是,有时文件已损坏,程序停止运行并且不会继续运行。因此整个程序都会受到影响。

我正在尝试开发一种方法,在某些秒后超时。我已经使用线程实现了这个。这是概念: - 我通过使用'thread.join'方法将函数作为线程调用,该方法等待执行线程函数的某些秒。超时后,我只是在中止线程。因此,调用返回到调用线程之后的代码。它按预期工作!

这个概念是好的做法吗?

1 个答案:

答案 0 :(得分:1)

这个概念存在多个问题:

  1. 使用异步代码很难实现,因为线程可能在执行期间发生变化,例如:该方法发出Web请求(线程1),并且回调可以由另一个线程执行(取决于您的同步上下文)。

  2. 线程很贵。创建或停止一个线程需要花费大量的时间,每个线程消耗大约4 MB的空间。

  3. 当您中止线程时,您将对象保持在未定义状态,当您在其上调用方法时,无法预测它发生了什么。

  4. 您无法通过线程中止来停止异步操作。

  5. 在我的观点中,如果你没有其他选择可以这样做,我想像IIS这样的系统也有一些中止机制来提高稳定性,但是你应该尝试不这样做。