- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在读取已接收到的少量数据时,我尝试比较同步方法和异步方法的性能。所以我发送数据并确保它正在等待接收套接字(相同的程序)。
source.Send(sendBuffer);
while (target.Available != sendBuffer.Length)
Thread.Sleep(50);
SocketAsyncEventArgs arg = new SocketAsyncEventArgs();
arg.Completed += AsyncCallback;
arg.SetBuffer(receiveBuffer, 0, sendBuffer.Length);
if(target.ReceiveAsync (arg))
{
//Pending request
//999 out of 1000 times we end up here
}
令我惊讶的是,ReceiveAsync 调用几乎从未同步完成。我假设 ReceiveAsync 会同步返回并执行得与 Receive 一样快,但由于它几乎从未发生过,我无法判断。我对 ReceiveAsync 的期望在这里是错误的吗?
总是首先检查 target.Available 并在有足够字节可用时执行 Receive 会更好吗?这种情况破坏了使用 ReceiveAsync 而不是 BeginReceive 的一些好处,这就是我写这个问题的原因。
最佳答案
ReceiveAsync
只是调用底层的 Winsock 子系统。 ReceiveAsync
使用所谓的 Overlapped IO(异步 IO)。在创建套接字以使用重叠 IO 的情况下:“无论传入数据是否填充所有缓冲区,重叠套接字都会出现完成指示”。其中“完成指示”是将被异步调用的回调。这意味着 ReceiveAsync
将始终是异步的(除非出现错误)。
关于c# - Socket.ReceiveAsync 什么时候同步返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11915815/
有没有办法使用 Microsoft.Azure.ServiceBus 包来等待当前线程从队列接收消息? 这可能更多是我的理解和以不打算使用的方式使用该技术的愿望的问题,但我想做的是结合 the fol
我已经习惯了同步套接字,但为了达到现在的状态,我有些头疼,尤其是在 Socket.Receive(..) 并不总是接收到所有字节的情况下 这是我以前使用的代码 public byte[] Re
我目前正在开发一个应用程序服务器。我想使用 AcceptAsync 方法。我收到错误消息“对象引用未设置为对象的实例。”调用 ReceiveAsync 方法时。如果有人提出这个问题并得到解决方案? p
我需要为一些旧的 cobol 重新实现数据库连接驱动程序我的一位客户的数据库。应用程序的构建方式,我无法使用async/await (就这样吧,我知道这很愚蠢)。 整个应用程序是一个 ASP.NET
我有一个基于异步Socket的长时间运行的服务程序。当其他设备检测到它的运行状况(短时间 TCP 端口连接和断开连接)时,它的内存使用量会随着时间的推移而不断增加。我怀疑这种类型的 TCP 连接的一些
美好的一天。我使用 UdpClient 并对其进行包装。 为了阅读我有异步方法: private async Task Receive(UdpClient client, CancellationTo
当使用异步套接字时,特别是 Socket.ReceiveAsync,是否可以进行“部分”接收?例如,我想指定我希望 SocketAsyncEventArgs 对象有 1024 个字节,但我只想允许接收
在读取已接收到的少量数据时,我尝试比较同步方法和异步方法的性能。所以我发送数据并确保它正在等待接收套接字(相同的程序)。 source.Send(sendBuffer); while (target.
我打算通过套接字接收数据包,但由于它们是从发送方以高频率发送的,所以它们中的许多被打包到一个 byte 数组中。 SocketAsyncEventArgs.Buffer 然后保存多个数据包,即使它们是
似乎在使用 SslStream 时我无法获得 ReceiveAsync 的好处,因为我必须通过仅支持 Begin* End* 异步模型的 SslStream 进行读取。 是否可以在完成身份验证之前只使
我看过 TCP 的 ReceiveAsync 示例,但没有看过 UDP。 ReceiveAsync 是否与 UDP 兼容?如果是这样,您看到过任何示例吗? 谢谢。 最佳答案 UDP 是面向数据报的协议
我正在使用如下所示的 UDPClient dim c = New UDPClient(port) client.CLient.ReceiveTimeout = 1 await client.Recei
我正在测试以下两种情况,一种有效,但另一种无效。我有套接字服务器和套接字客户端应用程序在两台不同的机器上运行 这两个场景都使用了 socketasynceventargs 场景 1(有效)循环创建 4
服务工作线程有两种方法处理来自 Azure 服务总线队列的消息: while (!ExitRequested) { try { var message = await
我有这段代码通过 UdpClient 发送命令,然后等待响应: cameraListener = new UdpClient(52381); cameraSender = new UdpCl
我正在使用 .NET 4.5.1 运行 C# 控制台应用程序。当我运行以下函数时,下面的 udpClient.ReceiveAsync() 调用会无一异常(exception)地静默终止程序。我该如何
我正在通过 websocket 接收 JSON。至少:我是部分的。使用在线 websocket 服务,我收到完整的 JSON 响应(所有 HTML 标记都被忽略)。当我查看在控制台中收到的 JSON
我目前正在编写一个客户端应用程序,我想知道我是否应该使用 Socket 类的 ReceiveAsync 或 BeginReceive 方法。到目前为止,我一直在使用后者,但是,我发现它似乎对 CPU
我有一个接口(interface) INetwork用一个方法: Task SendAsync(string messageToSend, CancellationToken ct) 接口(inter
我正在编写一个只使用一个套接字的简单套接字客户端。所以我想我可以为所有接收操作重用一个 SocketAsyncEventArgs。只要连接了 socket ,它就可以正常工作。当服务器断开连接时,客户
我是一名优秀的程序员,十分优秀!