2016-10-11 26 views
2

我不能從文檔告訴一下這兩者之間的區別是:差分功能

Socket.EndReceive Method (IAsyncResult, SocketError)

Socket.EndReceive Method (IAsyncResult)

請問而第二第一個輸出誤差一個投擲?

編輯:

更具體地講:如果拋出一個錯誤的輸出參數將是僞造的。這表明SocketError版本不會拋出錯誤。但它說它會拋出類似的錯誤。這是否意味着它拋出所有相同的錯誤?也許有錯誤發生但不會被拋出。也許你需要使用這個函數來獲取所有錯誤。我是否需要兩組錯誤處理 - 一個用於throw和一個用於輸出參數?一種功能是否比其他功能更受歡迎?

+0

這就是如何實現信息.net core https://github.com/dotnet/corefx/blob/2117bae3a6c9736033e6d1659821ff3a1069920b/src/System.Net.Sockets/src/System/Net/Sockets/Socket.cs#L3722。並在窗口中.net https://referencesource.microsoft.com/#System/net/System/Net/Sockets/Socket.cs,4485 – zerkms

+0

_「我無法從文檔告訴有什麼區別」_ - 爲什麼不?具體而言是什麼,這是文件似乎不清楚。請注意,兩者都拋出相同的異常,包括'SocketException'。所以它不可能是不會拋出異常的。從文檔中,似乎很清楚,一種方法只是提供了一種便捷的機制來直接檢索錯誤代碼。就我個人而言,我認爲這是多餘的,因爲如果錯誤代碼是不成功的,並且代碼很容易從異常對象中檢索到,你總是會得到一個異常。但是它就是這樣啊。 –

+0

對不起,請參閱編輯。 – johnnycrash

回答

0

基於文檔,它們都表現相同。唯一的區別是在做錯誤處理時額外的參數。

基於音符

如果收到SocketException,請使用SocketException.ErrorCode屬性獲取特定的錯誤代碼。獲得此代碼後,請參閱MSDN庫中的Windows套接字版本2 API錯誤代碼文檔以獲取錯誤的詳細說明。

看來你可以使用作爲引用傳遞的SocketError enum對象Socket.EndReceive Method (IAsyncResult, SocketError),以獲取有關什麼地方出了錯,而不需要檢查的Windows Sockets第2版API錯誤代碼文檔

+0

如果它拋出一個錯誤,該參數參數是不確定的? – johnnycrash

+0

@johnnycrash它不應該 –