我有是一個TCP客戶端偵聽器,看起來像這樣的方法:C#的異常沒有被捕獲
private static void ProcessClient(
Object obj)
{
ISession session = (ISession)obj;
NetworkStream networkStream = null;
try
{
DebugUtility.SetThreadName("Worker: {0}", session.Name);
networkStream = session.TcpClient.GetStream();
networkStream.ReadTimeout = Config.ReadTimeout;
// Loop received packets (blocks untill next packet)
Int32 packetSize;
Byte[] buffer = new Byte[session.PacketSize];
while ((packetSize = networkStream.Read(buffer, 0, buffer.Length)) != 0)
{
// Get String from packet bytes
String packet = Encoding.UTF8.GetString(buffer, 0, packetSize);
// Check if packet has data
if (String.IsNullOrEmpty(packet))
continue;
// Log biggest received package
DebugUtility.CheckMaxPacketSize(session.Name, packet.Length);
// Handle packet (in new thread)
Logger.DebugLog("Received: {0}", packet);
ThreadPool.QueueUserWorkItem(session.HandlePacket, packet);
}
}
catch (ObjectDisposedException) { }
catch (NotSupportedException) { }
catch (TimeoutException) { }
catch (SocketException) { }
catch (IOException) { }
catch (Exception ex)
{
Logger.LogException(ex);
}
finally
{
if (networkStream != null)
networkStream.Close();
if (session != null)
session.Disconnect();
}
}
這是一個遊戲服務,但是當我檢查我的日誌,我偶爾會看到這樣的錯誤:
System.Int32 Read(Byte[], Int32, Int32): The stream does not support reading.
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at BusinessLayer.Listener.ListenerWorker.ProcessClient(Object obj) in C:\path\ListenerWorker.cs:line 141 Line: 0
即上述文件和行141是
while ((packetSize = networkStream.Read(buffer,....
現在我已經發現,notsupported時例外是拋出這個錯誤,但爲什麼它會通過?爲什麼它不被忽略,但它是否通過正常的Exception ex處理程序?
編輯:有誰知道我怎麼能調用這個異常?它什麼時候發生?我只看到它在我的日誌中回到其他用戶,但我不知道它何時發生。
我會修復此代碼的第一件事是停止吞嚥你的例外的一大塊。既然你有一個記錄系統,爲什麼你會主動吞下最相關的例外而沒有任何痕跡呢? – 2011-01-20 11:42:27
不能同意更多!你爲什麼要對所有可愛的例外做這件事 - 他們在那裏幫助你! – 2011-01-20 11:47:19