2014-02-28 74 views
0

我们有一个打开文件的功能(文件是自定义的.oxr文件)。问题在于,有时文件被损坏,程序停止,不能继续运行,从而导致整个程序受到影响。使用线程来暂停一个函数是不是很好的做法?

我想开发一种方法,将超过某些秒钟后的功能。我已经使用线程来实现这一点。这里的概念: - 我通过使用'thread.join'方法调用函数作为一个线程,等待一定的时间线程函数执行。超时后,我只是中止线程。所以,调用返回到线程被调用点之后的代码。它按预期工作!

这个概念很好的做法吗?

+0

不,这不是一个好习惯。在你自己的过程中放弃一个线程是不好的。如果您无法修复您的功能,请在单独的子进程中运行此不稳定的操作,然后取消它。 – Noseratio

+0

以下是如何做到这一点的权利:http://stackoverflow.com/questions/13513650/how-to-set-timeout-for-a-line-of-c-sharp-code – Carsten

+0

@Aschratt,合作取消不是选项在这里,除非OP可以修复他的功能来处理损坏的数据(他应该首先完成的)。 – Noseratio

回答

1

您有多个问题,这个概念:

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

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

  3. 当您中止线程时,会将对象置于未定义状态,因此无法预测在对它们调用方法时发生了什么。

  4. 您不能停止线程异常中止的异步操作。

在我opionion它是好的,如果你没有其他选择,我想,像IIS系统也有一定的中止,mechanismus以提高稳定性做到这一点,但你应该尝试这样做。

相关问题