2016-10-11 80 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它不应该 –