我試圖在Windows 8 Metro應用程序中獲取網站的內容。我仍然對asyn和wait方法感到困惑。
但是,這是我所:在WinRT中從UI調用HttpClient - 沒有任何反應
private void HelloButton_Click(object sender, RoutedEventArgs e)
{
GetPage().Wait();
}
private async Task GetPage()
{
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("http://www.supertext.ch");
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
}
Unfortuantely,什麼都不會發生。如果嘗試調試它,它會停止在GetAsync()。
我是否需要使HelloButton_Click函數也是異步?
即使我等待函數GetPage()的完成?
我可以直接從GUI線程調用網絡請求嗎?
好了,等待是完全錯誤的?什麼時候適合使用它? – Remy
@Remy等待線程阻塞,導致死鎖。我建議你在Stack Overflow上搜索「等待等待死鎖」。我相信你會在這個話題上找到很好的材料。例如:http://stackoverflow.com/questions/13140523/await-vs-task-wait-deadlock – usr
@雷米:這幾乎總是錯的。 'Wait'是.NET 4的保留,*不用於'async'代碼。我有[詳細描述這種僵局的博客文章](http://nitoprograms.blogspot.com/2012/07/dont-block-on-async-code.html)。 –