我有一个继承System.ComponentModel.Component的类。该组件产生一个bacground线程,该线程进行长时间阻塞调用,等待外部事件。在我的Dispose中,线程被发出信号以完成其调用并返回。我可以确定该应用程序将始终调用我的Dispose吗?如何确保我的线程不会延迟并阻止客户端应用程序终止?
答案 0 :(得分:2)
如何确保我的线程不会延迟并阻止客户端应用终止?
将主题设为background thread via Thread.IsBackground
。这将使线程不会保持进程活着。
答案 1 :(得分:1)
无法保证在您的对象上调用IDisposable.Dispose
。您可以在所有正常情况下调用终结器。
由于Dispose只是惯例,因此不需要您必须通过良好的编码实践来强制执行,并且可能在终结器中运行时间检查(如果需要)。
不阻止应用程序的好方法不是进行长时间的同步调用。大多数API都有异步版本,更容易取消/忽略完成部分。如果你不能 - 使用Thread.IsBackground作为Reed Copsey的建议。