Recientemente, estaba investigando algunos errores complicados sobre objetos no eliminados.¿Cómo manejar la excepción lanzada desde Eliminar?
Encontré algunos patrones en el código. Se informa que algunos m_foo no están eliminados, mientras que parece que todas las instancias de SomeClass han sido eliminadas.
public class SomeClass: IDisposable
{
void Dispose()
{
if (m_foo != null)
{
m_foo.Dispose();
}
if (m_bar != null)
{
m_bar.Dispose();
}
}
private Foo m_foo;
private Bar m_bar;
}
que sospecha que Foo.Dispose podría lanzar una excepción, por lo que después de código no se ejecuta de manera m_bar no está dispuesto.
Dado que Foo/Bar puede ser de un tercero, por lo tanto no se garantiza que no arroje una excepción.
Si solo envuelve todo Eliminar invocación con try-catch, el código se volverá torpe.
¿Cuál es la mejor práctica para manejar esto?
@womp, su perder perder, si oculta/controlar una excepción arbitraria que se produce a partir de disponer que puede terminar perdiendo memoria o asas o bloqueos del sistema operativo. Todo lo cual puede causar estragos en su proceso. –
Muy cierto. Asumía que quería mantener el proceso a toda costa, pero probablemente debería haber dicho eso.Su mejor opción sería tirar el control o conseguir que el tercero lo arregle. Sus comentarios sobre "difícil de depurar" es un excelente punto. – womp