gpt4 book ai didi

c# - ReadAsync 退出,无法在调试中跟踪

转载 作者:太空宇宙 更新时间:2023-11-03 23:29:15 25 4
gpt4 key购买 nike

我有以下代码(_ns 是一个 NetworkStream)

await GetResponse(_ns);
btnSend.Enabled = true;

private async Task GetResponse(NetworkStream stream)
{
while (true)
{
var readBuffer = new byte[4096];
var asyncReader = await stream.ReadAsync(readBuffer, 0, readBuffer.Length);
txtBoxMessagesIn.Text += Encoding.ASCII.GetString(readBuffer.ToArray()) + Environment.NewLine;
if (asyncReader <= 0) break;
}
}

我似乎用我期望的填充了整个缓冲区,但 btnSend 从未启用。

当我在 Debug模式下运行它时,我的 while 循环运行了几次,我看到 asyncReader 被设置为不同的值,但它永远不会像我预期的那样等于 0 来中断循环,它只是在该行退出:

var asyncReader = await stream.ReadAsync(readBuffer, 0, readBuffer.Length);

不会产生任何错误。是什么原因造成的?我是否需要在 Visual Studio 中设置一些内容来中断此类错误?

最佳答案

ReadAsync 只会在流 结束 时返回 0。这就是所有流的工作方式。如果流尚未结束(即,对于套接字流,套接字仍处于打开状态),则 ReadAsync 将(异步地)等待流读取更多字节或结束。

我假设套接字的另一端只是挂着,但没有发送更多数据。在这种情况下,任何流读取都将等待它发送更多字节或关闭。没有异常(exception)——这不是特殊情况。由于套接字未关闭,读取的流不会返回 0,因此您的 while 循环不会退出。

关于c# - ReadAsync 退出,无法在调试中跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32869982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com