2011-11-22 9 views
5

Suponiendo que se diseña una extensión System.IO.StreamMyStream cuya Read método puede agotar el tiempo, que tipo de excepción sería más bien tirar:IOException vs TimeoutException

  • System.IO.IOException (como por ejemplo System.Net.Sockets.NetworkStream) o
  • System.TimeoutException (como por ejemplo System.IO.Ports.SerialPort) o
  • algo más?
+2

Personalmente, imitaba lo que las clases de .NET existentes estaban haciendo; Ambas opciones son posiblemente válidas, así que vaya con la que las personas ya estén familiarizadas. –

+2

@MichaelEdenfield Creo que ese es el punto de Tamberg: hay múltiples excepciones en el BCL que, a primera vista, parecen apropiadas. –

Respuesta

3

Si la excepción es que el Stream va a "tiempo de espera", entonces yo personalmente uso TimeoutException. Esto es muy claro y muy apropiado si esa es la causa subyacente.

IOException es utilizado por NetworkStream, pero tiene un significado diferente. En este caso, normalmente se debe a que el socket subyacente se ha cerrado, lo que impide que se produzca la lectura/escritura ...

1

Utiliza un TimeoutException; transmite más exactamente lo que realmente sucedió.

El IOException es más una excepción de propósito general; si algo sucedió mientras leía el backing store subyacente para el Stream para el que no hay una excepción específica, esperaría un IOException.

TimeoutException es el estándar aquí, así que ve con eso.

Cuestiones relacionadas