C# SocketAsyncEventHandler 评估 Complete 操作

C# SocketAsyncEventHandler evaluate operation on Complete

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
}

或者两者兼而有之?一个显示成功一个不显示是什么意思?

首先,请注意,在调用 *Async 方法(在本例中为 ConnectAsync)之前, 需要订阅事件 ,并且 must 检查 *Async 方法中的 return 值 - truefalse 指示它是否同步完成;如果同步完成,它将不会调用您的回调 - 预计 将调用任何所需的代码。

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