- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是最小的可能场景,我能够准备:
问题是第二次读取挂起。如果使用“等待 ReadAsync”,它会完美运行。
当我中断程序时,我可以看到调用堆栈从 task.Wait() 开始并在 System.Threading.Monitor.Wait() 结束。
如果我一步步调试它,它不会挂起。我必须承认它看起来像一个 .NET 框架错误,但也许我遗漏了一些明显的东西。
private static async Task<byte[]> ReadAsync(StreamSocket socket)
{
// all responses are smaller that 1024
IBuffer buffer = new byte[1024].AsBuffer();
await socket.InputStream.ReadAsync(
buffer, buffer.Capacity, InputStreamOptions.Partial);
return buffer.ToArray();
}
private static byte[] Read(StreamSocket socket)
{
Task<byte[]> task = ReadAsync(socket);
task.Wait();
return task.Result;
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
Encoding encoding = Encoding.GetEncoding("Windows-1250");
using (StreamSocket socket = new StreamSocket())
{
await socket.ConnectAsync(
new HostName("imap.gmail.com"), "993", SocketProtectionLevel.Ssl);
// notice we are using Wait() version here without any problems:
byte[] serverGreetings = Read(socket);
await socket.OutputStream.WriteAsync(
encoding.GetBytes("A0001 NOOP\r\n").AsBuffer());
await socket.OutputStream.FlushAsync();
//byte[] noopResponse = await ReadAsync(socket); // works
byte[] noopResponse = Read(socket); // hangs
}
}
最佳答案
我解释了这个死锁的原因in my recent MSDN article以及on my blog .
简短的回答是,您不应该在async
代码上调用Wait
或Result
;你应该一直使用await
。
关于c# - StreamSocket.InputStreamOptions.ReadAsync 在使用 Wait() 时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16436824/
DataReader.LoadAsync 不检测关闭的套接字(使用 InputStreamOptions::Partial) 我正在通过 TCP 连接向服务器发送数据并读取响应,但之后一切正常。但是在
我有一个 StreamSocket,我在关闭 UWP 应用程序期间将其丢弃。我的具有 Socket 连接的客户端仍然认为连接是事件的,即使应用程序已经关闭。 只有在重新启动套接字时,我的客户端才会给出
我正在开发一个 C#、UWP 10 解决方案,它使用快速、连续的读/写循环与网络设备通信。 API 提供的 StreamSocket 似乎工作得很好,直到我意识到存在内存泄漏:累积了 Task。在堆中
我正在使用 StreamSocketListener 在 Windows Phone 8(充当服务器)上接收由 HTTP POST 客户端发送的数据。我可以接收数据,但是当读取所有数据时,DataRe
所以我已经收到这个异常大约一个星期了,我终于设法将它变成一个易于阅读的代码片段。 作为背景,我正在为 Windows RT 编写一个应用程序,我正在尝试使用基本套接字。 为了测试,我创建了一个本地套接
我有一台运行 MPD(音乐播放器守护程序)的服务器,它通过套接字进行通信。现在我正在尝试在 Windows 商店应用程序中实现 MPD 协议(protocol)。基本上我发送一个命令并收到一个列表,该
我正在研究 WinRT(Windows8 Release Preview)。我有一个 Web 应用程序(实际上是一个更简单的 XMPP 客户端)。 我主要使用 StreamSocket 类来连接 Ja
我有一个 WinRT 应用程序,它使用 StreamSocket 和 DataWriter 执行上传。它跟踪上传所花费的时间,然后计算吞吐量。 我遇到的问题是我获得的吞吐量远高于 Wireshark
我正在尝试在 C# 中为 UWP 实现 XMPP 客户端,为了实现这一点,我使用 StreamSocket 进行 TCP 连接。 问题是对于握手和SASL auth,我需要服务器从客户端进行一系列“写
我正在尝试通过 StreamSocket 发送 HTTP 请求,但响应被 chop 为 “failedWinRTError:对象已关闭。” 这是我的代码: var count, hostName,
我的 Windows Phone 8 应用程序中有以下代码。 //connection code, done during app start socket = new StreamSocket();
在 Windows Phone 8.1 应用程序中,我必须按如下方式创建套接字。我如何更改它,以便它在我可以指定的时间段后超时? _socket = new StreamSocket(); await
我发布这个是因为我已经浪费了一天的时间来搜索和编程一个即使在 Metro 中也应该很容易设置的东西。 我正在寻找一个 C# StreamSocket 示例,它可以连接到套接字,从套接字读取数据(我不确
我尝试将已连接的 StreamSocket 附加到 SecureStreamSocket: class MyConnection : public TCPServerConnection { pr
我有以下 c#/WinRT 代码来接收来自 IMAP 命令的响应 DataReader reader = new DataReader(sock.InputStream); reader.InputS
使用 Windows StreamSocket 类 (TCP) 处理断开连接和重新连接事件的正确方法是什么? 我有一个问题,在断开连接事件后调用 async_connect 时调用“无效操作,在意外时
我有一个正在为 Windows 8/WinRT 编写的应用程序,它使用 StreamSocket API 与服务器建立流式连接。也就是说,服务器向客户端流式传输数据,有时带有元标记,并且可以随时断开连
我可以使用 TLS 1.2 成功连接到我们的服务器。但是我们可以选择传入 SNI(在客户端问候消息中),这会将我们重定向到防火墙后面的另一台服务器。如何在 C# StreamSocket 或 SslS
这是最小的可能场景,我能够准备: 此代码连接到 imap.gmail.com 读取初始服务器问候语(使用 Read 方法) 发送 NOOP 命令(NO 操作) 读取 NOOP 命令响应(再次使用 Re
我正在创建一个 Win 8 商店应用程序,我在其中使用 StreamSocket 连接到一个用 Java 编写的服务器。当我在调试中运行应用程序时,在 StreamSocket.ConnectAsyn
我是一名优秀的程序员,十分优秀!