C# 如何知道为什么HttpClient调用不';你不回来了吗?

C# 如何知道为什么HttpClient调用不';你不回来了吗?,c#,asp.net,.net,rest,C#,Asp.net,.net,Rest,我从这里获取了以下代码: 我已经将基地址和头URL部分更新为我的。完整的URL通过浏览器按预期工作 当我使用下面的代码时,调用是从WebAPI应用程序发出并返回的。我可以看到这一点,因为Web API应用程序正在调试模式下运行。但在这一行之后,调用方不会发生任何事情: HttpResponseMessage response = await client.GetAsync("api/products/1"); 应用程序似乎冻结了。UI没有响应。我确实在try/catch块中有该代码,但它没有遇

我从这里获取了以下代码:

我已经将基地址和头URL部分更新为我的。完整的URL通过浏览器按预期工作

当我使用下面的代码时,调用是从WebAPI应用程序发出并返回的。我可以看到这一点,因为Web API应用程序正在调试模式下运行。但在这一行之后,调用方不会发生任何事情:

HttpResponseMessage response = await client.GetAsync("api/products/1");
应用程序似乎冻结了。UI没有响应。我确实在try/catch块中有该代码,但它没有遇到异常

有没有办法知道发生了什么

该应用程序的名称如下:

class Program
{
    static void Main()
    {
        RunAsync().Wait();
    }

    static async Task RunAsync()
    {
        using (var client = new HttpClient())
        {
            // TODO - Send HTTP requests
        }
    }
}
应用程序似乎冻结了。用户界面没有响应


这是一个winforms应用程序-MDI forms应用程序。为什么这与从控制台应用程序调用有什么不同

你看到了一个我在博客上完整解释的问题。总之,默认情况下,
await
将捕获一个“上下文”,并使用它来恢复
async
方法。在UI线程中,“上下文”是UI
SynchronizationContext
,因此
wait
之后的代码将在该UI线程上恢复。(在控制台应用程序中,没有“上下文”,因此
wait
之后的代码将在线程池线程上恢复)


问题是调用代码正在调用
Task.Wait()
。这将阻止UI线程,直到该
任务
完成。但是,该
Task
表示执行
async
方法,并且该方法在UI线程空闲之前无法完成。因此,死锁。

如何调用执行此代码的方法?我怀疑是由于使用了
.Wait()
.Result
而导致死锁。您是否尝试了Fiddler?我已更新了OPPlease post a。这听起来很像在WinForms应用程序下运行此代码时得到的结果,但您已经发布了一些指示控制台应用程序的信息。这是一个WinForms应用程序-MDI forms应用程序。为什么这与从控制台应用程序调用有什么不同?
class Program
{
    static void Main()
    {
        RunAsync().Wait();
    }

    static async Task RunAsync()
    {
        using (var client = new HttpClient())
        {
            // TODO - Send HTTP requests
        }
    }
}