【发布时间】:2017-03-03 12:45:44
【问题描述】:
现在我知道我可能做错了,因为我对 async/await 很陌生,.. 但我遇到了一个无法解决的随机问题。
我正在调用 Google Places API(成功)并获得结果。
Response results = await Api.SearchPlaces(lat, lon, "");
results 包含 20 个位置的响应,这很棒。 然后我尝试遍历它们并将它们添加到地点列表中。
var places = new List<Place>();
foreach (var place in results.Places)
{
places.Add(place);
}
在调试器中,当我点击 results.Places - Visual Studio 只是停止调试。没有错误,它只是停止。
如果我快速调试结果并进入 foreach 循环,我可能会通过将地点添加到我的地点列表中进行 2-3 次迭代,然后它会停止,如果我等待 10 秒,它会在我击中的第二秒停止第一次 foreach 迭代。
VS 刚刚停止的时间点似乎与 Google 查找完成的时间有关。但我只是不明白为什么我不能将结果添加到列表中以及为什么 VS 会无缘无故地停止。
我用来调用 API 的整个方法是异步并返回一个任务
public static async System.Threading.Tasks.Task CreateAccountsFromGPSPositions()
{
}
我知道这可能是一个简单的 async/await 事情,但我只是不明白为什么 VS 在仍有代码要运行时停止..
我没有正确处理结果吗?我能不能像往常一样做一些事情,结果..
调用搜索的方法是这样的:
async public static Task<Response> SearchPlaces(double latitude, double longitude, string query)
{
try
{
HttpResponseMessage resp;
resp = await Client.GetAsync(String.Format("nearbysearch/json?key={0}&location={1},{2}&sensor=true&rankby=distance&keyword={3}", AppSecret, latitude, longitude, query));
if (resp.IsSuccessStatusCode)
{
return JsonConvert.DeserializeObject(await resp.Content.ReadAsStringAsync(), typeof(Response)) as Response;
}
else
{
return null;
}
}
catch
{
return null;
}
}
【问题讨论】:
-
你会想要阅读这篇文章:msdn.microsoft.com/en-us/magazine/jj991977.aspx。它将通过异步编程和错误处理改变你的生活。
标签: c# async-await