gpt4 book ai didi

C# SocketAsyncEventHandler 在 Complete 上评估操作

转载 作者:行者123 更新时间:2023-12-03 11:59:10 24 4
gpt4 key购买 nike

您如何使用 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),而您 必须检查 *Async 的返回值方法 - true对比 false表示是否同步完成;如果它同步完成,它 不会调用您的回调 - 预计您将调用任何所需的代码。

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

关于C# SocketAsyncEventHandler 在 Complete 上评估操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59197038/

24 4 0