Ric*_*zak 1 c# async-await windows-8 winrt-xaml
我有一个"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;
}
Run Code Online (Sandbox Code Playgroud)
但是当我在单元测试中使用相同的代码时,它可以工作.
在应用程序中,我称之为:
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));
}
Run Code Online (Sandbox Code Playgroud)
在您的应用程序中,您没有在等待调用this.loader.GetXmlAsync(url)之前等待您点击此行,在另一个线程上触发异步任务,然后立即前进到下一行而没有得到响应.它适用于您的单元测试,因为您正确使用了await关键字.
归档时间: |
|
查看次数: |
735 次 |
最近记录: |