为什么我的调试器似乎卡在await语句中?

fdk*_*fsf 1 c# visual-studio-debugging visual-studio-2017

我是新手,所以请耐心等待.我正在调试并遇到问题:

var response = await client.GetAsync(uri);
Run Code Online (Sandbox Code Playgroud)

我编辑了这个问题,因此它符合最小,完整和可验证的例子.

我在这个语句上跳过调试器,以便在下一个语句中移动,但由于我仍然不知道原因,调试器似乎丢失了并且没有恢复.

每次我await打电话和转发时,每次都会发生这种情况.调试器断点刚刚消失.

以下是所有代码:

public class App : Application // superclass new in 1.3
{
    public App ()
    {
        MainPage = new PinPage { Title = "Pins", Icon = "marker.png" };
    }
}

public class PinPage : ContentPage
{
    private async Task FetchDataAsync()
    {
        HttpClient client = new HttpClient();
        string resultUrl = "http://myuser.gtempurl.com/Service1.svc/GetLocations";
        var uri = new Uri(string.Format(resultUrl, string.Empty));
        var response = await client.GetAsync(uri);
        if (response.IsSuccessStatusCode)
        {
            string content = await response.Content.ReadAsStringAsync();
            var obj = JsonConvert.DeserializeObject(content);
        }

    }
    public PinPage ()
    {
        FetchDataAsync().GetAwaiter().GetResult();
    }
}
Run Code Online (Sandbox Code Playgroud)

WCF服务不是问题.它发布在公共服务器上,因此始终可用.我从浏览器调用它,它返回预期的字符串.

我正在使用VS2017并在Android模拟器中进行调试.

以下是断点访问语句时的屏幕截图:

在此输入图像描述

Ste*_*ary 6

它不会移动到下一行.没有其他代码行突出显示黄色,没有超时,没有.

这听起来像是一个僵局.由于这是一个UI应用程序,进一步检查您调用堆栈任何阻塞调用像Wait(),ResultGetAwaiter().GetResult().如果从UI线程调用,这些可能会死锁.

正确的解决方案是将它们改为await; 换句话说,用async所有的方式.