Ned*_*nov 5 c# asynchronous async-await
我一直在阅读,async/await
并试图通过调用WebClient.DownloadStringTaskAsync
UI线程然后task.Result
在任务执行时调用UI线程来重现Windows窗体中的死锁场景.这导致了僵局.
然后我尝试通过调用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;
}
Run Code Online (Sandbox Code Playgroud)