在对FileStream对象调用Close()方法之前,我拔下了底层的USB驱动器。Close()方法在尝试刷新未写入的数据时将引发异常。如果我压制异常(catch,但不要重新抛出),那么终结器将在任意时间后调用。它将尝试刷新未写入的数据,但遇到相同的错误,导致应用程序终止。
有标准的方法来处理失败的Close()调用吗?如果Close()遇到错误,您可能会1)泄露文件句柄,或者2)导致应用程序终止,这两种情况都是不可接受的。
如果不是调用Close()
,而是调用Dispose()
,或者将代码包装在using
中,则应该能够避免GC的异常,因为终结器将不再尝试处理流。
您可以使用GC.SuppressFinalize来禁止执行终结器,这样以后当对象被垃圾收集时就不会出现错误。