2011-11-22 226 views
5

假設你設計一個System.IO.Stream擴展MyStreamRead方法可能會超時,這異常的類型,你寧願拋出:IOException異常與TimeoutException異常

  • System.IO.IOException(如如System.Net.Sockets.NetworkStream)或
  • System.TimeoutException(如如System.IO.Ports.SerialPort )或
  • 別的東西?
+2

就我個人而言,我會模仿現有的.NET類正在做什麼;這兩種選擇都可以證明是有效的,所以請與人們可能已經熟悉的選項一致。 –

+2

@MichaelEdenfield我認爲這就是tamberg的觀點 - BCL中有多個例外,乍一看似乎是合適的。 –

回答

3

如果例外情況是Stream將「超時」,那麼我會親自使用TimeoutException。這是非常明確的,如果這是潛在的原因,則非常合適。

IOExceptionNetworkStream使用,但是具有不同的含義。在這種情況下,通常是因爲底層套接字已關閉,從而防止發生讀/寫操作...

1

您使用TimeoutException;它最準確地傳達了實際發生的事情。

IOException更多的是一種通用的例外;如果在閱讀Stream的底層支持存儲時發生了某些特定異常,那麼我希望可以使用IOException

TimeoutException是這裏的標準,所以請遵循這一點。