1

您如何使用SocketAsyncEventArgs评估 Socket 操作是否成功?您是否评估作为参数传递的 SocketAsyncEventArgs?

SocketasyncEventArgs saea = new SocketAsyncEventArgs();
socket.ConnectAsync(saea);
saea.Completed += (sender, args) => 
{
    if(saea.SocketError != SocketError.Success)
        // fail
}

或者您是否评估Completed事件中的 SocketAsyncEventArgs?

saea.Completed += (sender, args) => 
{
    if(args.SocketError != SocketError.Success)
        // fail
}

或两者?如果一个显示成功而另一个没有,这意味着什么?

4

1 回答 1

2

首先,注意在调用方法之前需要订阅事件(在这种情况下),并且必须检查方法的返回值——vs表示它是否同步完成;如果它同步完成,它将不会调用您的回调 - 预计将调用任何所需的代码。*AsyncConnectAsync*Asynctruefalse

至于问题:args在事件中使用。主要原因是效率;第一个示例使用“捕获的变量”,这意味着它需要一个捕获上下文实例和每个订阅的委托实例。第二个示例不使用捕获的变量,因此编译器优化委托创建以对所有订阅使用单个静态事件处理程序实例。

于 2019-12-05T14:32:23.090 回答