Tôi đã đọc lên một chút trên async/await
và đang cố gắng tạo lại kịch bản bế tắc trong các cửa sổ bằng cách gọi WebClient.DownloadStringTaskAsync
trên chuỗi giao diện người dùng và sau đó gọi task.Result
trên chuỗi giao diện người dùng trong khi tác vụ đang thực thi . Điều này dẫn đến một bế tắc.ConfigureAwait (false) vẫn là deadlocks
Sau đó, tôi đã cố gắng giải quyết vấn đề bằng cách gọi ConfigureAwait(false)
trên tác vụ được trả lại, nhưng với sự ngạc nhiên của tôi vẫn gây ra bế tắc. Sự hiểu biết của tôi là nó nên thực hiện việc tiếp tục của phương pháp trên một chủ đề khác nhau và do đó không nên có bế tắc. Tôi đang thiếu gì?
Tôi biết cách giải quyết vấn đề nhưng suy nghĩ ConfigureAwait(false)
cũng sẽ khắc phục sự cố.
Đây là đoạn mã, tôi đang sử dụng 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;
}