私は少し読んでいて、タスクの実行中にUIスレッドを呼び出してからUIスレッドをasync/await
呼び出すことにより、Windowsフォームでデッドロックシナリオを再現しようとしていました。これにより、デッドロックが発生しました。WebClient.DownloadStringTaskAsync
task.Result
次に、返されたタスクを呼び出して問題に対処しようとしまし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;
}