我有以下代码:
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"))
这永远不会完成。但是,如果我从.Wait()
取消RunAsync().Wait();
,那么代码会正常运行到最后。当我将.Wait()
放在方法调用上时,为什么会卡住?
我必须把它,因为如果我没有剩下的代码将继续运行,不会等待方法完成...
答案 0 :(得分:4)
等待之后的代码将在它启动的同一个线程中执行。这是等待的方式。但是,既然你已经通过调用 Wait()来阻止该线程,那么它将永远被锁定