【发布时间】:2020-02-24 16:39:58
【问题描述】:
如何使用同步的System.Xml.Serialization.XmlSerializer.Deserialize 方法使这样的代码异步运行,这迫使我一直使用Result?
...
await GetContent(url)
...
private async Task<Node> GetContent (string url)
{
var response = _httpClient.GetAsync(url).Result;
var ser = new XmlSerializer(typeof(Node));
retVal = (Node)ser.Deserialize(response.Content.ReadAsStreamAsync().Result);
}
【问题讨论】:
-
这里需要更多信息,是包含方法
async吗? -
问题是父方法,而不是
Deserialize。至少设为async Task并使用await读取值。 不要将电话放在同一行。即使是同步代码,它也会让调试变得一团糟。 -
你应该使用
using var stream= await response.Content.ReadAsStreamAsync(); retVal=(Node)ser.Deserialize(content); -
这能回答你的问题吗? How to use HttpClient without async
-
顺便说一句,流 必须 被释放,否则与服务器的连接保持打开状态。当前代码正在泄漏连接
标签: c# asynchronous serialization .net-core async-await