【问题标题】:C# async sockets - is async callback always called?C# 异步套接字 - 是否总是调用异步回调?
【发布时间】:2012-03-16 10:01:14
【问题描述】:

如果我使用:

connectionSocket.BeginSend(data, 0, length, SocketFlags.None, out error, new AsyncCallback(SendDataDone), state);

即使在操作同步完成的情况下也会调用 SendDataDone 回调,还是我应该测试 asyncRes.CompletedSynchronously 并知道它是否返回 true 表明我的回调没有被调用?

我希望回调总是被调用...

【问题讨论】:

    标签: c# networking asynchronous network-programming


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      根据文档:

      您的回调方法应该调用 EndSend 方法。当你的 应用程序调用 BeginSend,系统将使用单独的线程 执行指定的回调方法,并在 EndSend 上阻塞直到 Socket 发送请求的字节数或抛出异常。

      所以只要没有任何东西杀死线程,你就已经处理了可能的参数异常并且你准备好等待,一切都会好起来的。您可能只需要注意处理可能的 SocketException 或 ObjectDisposedException。

      【讨论】:

      • 是的,这是有道理的,否则 EndSend 将无法完成异步调用模式并且请求的资源不会被释放..
      猜你喜欢
      • 2012-08-20
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多