gpt4 book ai didi

c# - 异步等待模式帮助。我做对了吗?

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:32 27 4
gpt4 key购买 nike

我有一个“api”,例如存储库模式,我写了从 web 返回 xml,然后将它混合到类中。

它似乎卡在 GetXmlAsync(url) 方法的结果上。

public async Task<string> GetXmlAsync(string url)
{
string xml = string.Empty;

HttpMessageHandler handler = new HttpClientHandler();
HttpClient httpClient = new HttpClient(handler);
Uri uri = new Uri(url, UriKind.Absolute);
HttpResponseMessage response = await httpClient.GetAsync(uri);

xml = await response.Content.ReadAsStringAsync();

return xml;
}

但是当我在单元测试中使用相同的代码时,它起作用了。

在应用程序中,我这样调用它:

public async Task<IEnumerable<Post>> GetRecentAsync(int page)
{
string url = this.urls.GetRecent(page);
string xml = string.Empty;

var xmlTask = this.loader.GetXmlAsync(url);

xml = xmlTask.Result; // Hangs right here.

var results = this.modelLoader.XmlToPost(xml);

if (results.Count() < 1)
{
this.LastError = XmlLoadError;
}

return results.AsEnumerable();
}

[TestMethod]
public async Task Integration_HttpLoader_GetXmlAsync_GetRecent_Xml_ShouldNotBeNullOrEmpty()
{
int page = 1;
string xml = string.Empty;
IUrl url = this.GetUrlHelper();
ILoader loader = this.GetIntegrationLoader(false);

xml = await loader.GetXmlAsync(url.GetRecent(page));

Assert.IsTrue(!string.IsNullOrEmpty(xml));
}

最佳答案

在您的应用中,您没有在调用 this.loader.GetXmlAsync(url) 之前使用 await 您点击这一行,在另一个线程上触发异步任务,然后立即继续下一行没有得到回应。它在您的单元测试中有效,因为您正确使用了 await 关键字。

关于c# - 异步等待模式帮助。我做对了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12048128/

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