5
我一直在讀,並試圖通過在UI線程上調用WebClient.DownloadStringTaskAsync
在Windows窗體中重現死鎖場景,然後在任務執行時在UI線程上調用task.Result
。這導致了僵局。ConfigureAwait(false)仍處於死鎖狀態
然後我試圖通過在返回的任務上調用ConfigureAwait(false)
來解決該問題,但令我驚訝的是仍然導致了死鎖。我的理解是它應該在不同的線程上執行該方法的延續,因此應該沒有死鎖。我錯過了什麼?
我知道如何解決這個問題,但認爲ConfigureAwait(false)
也會解決它。
下面是代碼,我使用NET 4.5
private async void button1_Click(object sender, EventArgs e)
{
// Deadlocks!
Task<string> task = DownloadAsync();
textBox1.Text = task.Result;
// Works
//textBox1.Text = await DownloadAsync();
}
private static async Task<string> DownloadAsync()
{
var client = new WebClient();
string result = await client.DownloadStringTaskAsync("http://www.rpmglobal.com").ConfigureAwait(false);
return result;
}