在调用FileStream对象上的Close()方法之前,我拔下底层的USB驱动器。 Close()方法在尝试刷新未写入的数据时会抛出异常。如果我压制异常(捕获,但不要重新抛出),则终结器将在以后的任意时间内调用。它将尝试刷新未写入的数据但遇到相同的错误,导致应用程序终止。
是否有一种标准方法来处理失败的Close()调用?似乎如果Close()遇到错误,1)泄漏文件句柄或2)导致应用程序终止,这两者都不可接受。
答案 0 :(得分:1)
如果不是调用Close()
,而是调用Dispose()
,或者将代码包装在using
中,您应该可以避免GC的异常,因为终结器不会尝试再次处理流。
答案 1 :(得分:0)
您可以使用GC.SuppressFinalize来禁止终结器执行,因此稍后当对象被垃圾回收时,您将不会收到错误。