Я читал немного о async/await
и пытаюсь воспроизвести сценарий взаимоблокировки в окне формы, вызвав WebClient.DownloadStringTaskAsync
в потоке пользовательского интерфейса, а затем вызвать task.Result
в потоке пользовательского интерфейса, а задача выполнения , Это привело к тупиковой ситуации.ConfigureAwait (ложь) до сих пор ТУПИКОВ
Затем я попытался решить проблему, вызвав 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;
}