c# - 来自 MSDN 的异步客户端套接字示例

标签 c# sockets asynchronous msdn

我对这个例子有疑问:Asynchronous Client Socket . 它说操作是异步的,它们(提供了beginxxx/endxxx),但它们使用ManualResetEvent,如果我正确理解示例代码 - 这样的调用:

  Receive(client);
  receiveDone.WaitOne();

会阻塞线程,它们被调用。因此,如果我有一个带有 UI 的应用程序并且我从主线程调用该异步套接字代码 - 应用程序将卡住......或者我错了吗?抱歉,我希望在不卡住主线程的情况下通过 tcp 异步发送/接收一些命令。我是否必须调用该示例中的所有套接字操作以避免卡住?

最佳答案

是的,此代码已设置为同步运行。但是,您可以轻松地自己使用 Beginxxx 和 Endxxx 调用,而不是像编写异步操作的这个(糟糕的)示例那样包装它们。

为进一步说明,本文确实异步运行每个方法,但随后使用 blocker.WaitOne(); 进行阻塞这将有它的回调触发接收等

您还可以使用 TPL并利用他们的 ContinueWith功能来做到这一点。那么你的代码甚至可能看起来更干净:)

关于c# - 来自 MSDN 的异步客户端套接字示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10230349/

相关文章:

node.js - ForEach 循环中的异步/等待 Node -Postgres 查询

c# - 异步等待最佳实践

c# - 没有指定authenticationScheme,也没有找到默认认证和自定义授权的DefaultChallengeScheme

重定向标准错误的 C# 问题

c# - 将 Socket.ReceiveAsync 替换为 NetworkStream.ReadAsync(可等待)

c - 在 TCP 的 nanomsg 中使用哪种类型的套接字

java - Websocket 与 Spring mvc、stomp、sockjs、Angular JS

c# - LINQ to Entities 中的批量删除

C# MongoDb 驱动程序包含子对象

Python 线程不适用于 pygobject?