【发布时间】:2018-10-17 17:43:34
【问题描述】:
我有以下 C# 代码:
var response = client.GetAsync(uri).Result;
MemoryStream stream = new MemoryStream();
response.Content.CopyToAsync(stream);
System.Console.WriteLine(stream.Length);
当我在第一条语句之前插入断点然后继续程序时,代码运行良好,流中存储了超过 4 MB 的数据。
但是,如果我在没有任何断点的情况下运行程序或在上面显示的第一条语句之后插入断点,则代码会运行但没有数据或只有 4 KB 的数据存储在流中。
谁能解释一下为什么会这样?
编辑: 这是我在我的程序中尝试做的事情。我使用几个 HttpClient.PostAsync 请求来获取 uri 来下载 wav 文件。然后我想将 wav 文件下载到内存流中。我不知道还有其他方法可以做到这一点。
【问题讨论】:
-
您没有等待
response.Content.CopyToAsync(stream);完成。在这里使用await。尽量避免.Result,因为它是一个阻塞操作 -
首先,您应该使用 await。所以
var response = await client.GetAsync(uri);以及复制到await response.Content.CopyToAsync(stream); -
这是如何异步的?你有 .结果背后的方法。也许我错过了什么?
-
@PeterBons 我在某处读到,如果我们使用
.Result,它只会将方法呈现为同步的,即程序会一直等到方法返回,这就是我想要的 -
但请注意,这可能会导致死锁。你为什么要那样做?
标签: c# asynchronous breakpoints