【问题标题】:C# VS2015 just randomly stops project when debugging http async responseC# VS2015 在调试 http 异步响应时只是随机停止项目
【发布时间】: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;
        }
    }

【问题讨论】:

标签: c# async-await


【解决方案1】:

谢谢史蒂夫, 我和我的一个朋友谈过,他让我明白了这一点。显然,控制台应用程序中的 async/await 的行为与 Windows 窗体应用程序或 Web 应用程序不同。我遇到了死锁的情况。如果 VS 告诉你,而不是仅仅停止而没有错误,那会很方便...

解决方案是将我的 await 调用包装在 Task.Run 中并调用 .Wait()。

完成的代码:

var task = System.Threading.Tasks.Task.Run(async () => await Api.SearchPlaces(lat, lon, ""));
task.Wait();

然后

foreach (var place in task.Result.Places)
{
    places.Add(place);
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多