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 值 - true
与 false
指示它是否同步完成;如果同步完成,它将不会调用您的回调 - 预计 您 将调用任何所需的代码。
至于问题:在事件中使用args
。这样做的主要原因是效率;第一个示例使用 "captured variable",这意味着每个订阅需要一个捕获上下文实例和一个委托实例。第二个示例 不 使用捕获的变量,因此编译器优化委托创建以使用单个静态事件处理程序实例进行 all 订阅.
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 值 - true
与 false
指示它是否同步完成;如果同步完成,它将不会调用您的回调 - 预计 您 将调用任何所需的代码。
至于问题:在事件中使用args
。这样做的主要原因是效率;第一个示例使用 "captured variable",这意味着每个订阅需要一个捕获上下文实例和一个委托实例。第二个示例 不 使用捕获的变量,因此编译器优化委托创建以使用单个静态事件处理程序实例进行 all 订阅.