为什么 "RunAsync().Wait()" 永远不会完成 运行,但如果我取消“.Wait()”,它 returns 我会得到正确的结果?

Why does "RunAsync().Wait()" never finishes running, but if i take off the ".Wait()" it returns me the right result?

我有以下代码:

    public MainWindow()
    {
        InitializeComponent();
        RunAsync().Wait();
    }

    private static async Task RunAsync()
    {
        var baseAddress = new Uri("https://api.trakt.tv/");
        using (var httpClient = new HttpClient { BaseAddress = baseAddress })
        {
            httpClient.DefaultRequestHeaders.TryAddWithoutValidation("trakt-api-version", "2");

            httpClient.DefaultRequestHeaders.TryAddWithoutValidation("trakt-api-key", "");

            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            using (var response = await httpClient.GetAsync("search?query=Arrow&type=Show"))
            {
                string responseData = await response.Content.ReadAsStringAsync();
            }
        }
    }

当我运行它时,它卡在了以下部分:

using (var response = await httpClient.GetAsync("search?query=Arrow&type=Show"))

这永远不会完成 运行ning。但是如果我从 RunAsync().Wait(); 中取下 .Wait() 那么代码 运行 就会正常结束。为什么我把 .Wait() 放在方法调用上时会卡住?

我必须说出来,因为如果我不这样做,其余代码将继续 运行 并且不会等待方法完成...

你这里遇到了僵局。

await 之后的代码将在启动时在同一个线程中执行。这就是 await 的工作方式。但是由于您已经通过调用 Wait() 阻塞了线程,它将永远被锁定