假设您设计了一个System.IO.Stream
扩展名MyStream
,其Read
方法可以超时,您宁愿抛出哪种异常类型:
System.IO.IOException
(例如System.Net.Sockets.NetworkStream
)或System.TimeoutException
(例如System.IO.Ports.SerialPort
)或答案 0 :(得分:3)
如果例外情况是Stream
将“超时”,那么我个人会使用TimeoutException
。这是非常明确的,如果这是根本原因则非常合适。
IOException
使用 NetworkStream
,但含义不同。在这种情况下,通常是因为底层套接字已关闭,这会阻止读/写发生...
答案 1 :(得分:1)
你使用TimeoutException
;它最准确地传达了实际发生的事情。
IOException
更像是一个通用例外;如果在读取没有特定例外的Stream
的基础后备存储时发生了某些事情,那么我期望IOException
。
TimeoutException
是此处的标准,所以请继续使用。
答案 2 :(得分:-1)
网络流超时时,IOException.InnerException
是SocketException
,而IOException.InnerException.SocketErrorCode
是SocketError.TimedOut
。
我希望它只抛出TimeoutException,这样我就不必测试这种奇怪的情况。