Почему код выполняется синхронно? - C#
Формулировка задачи:
Всем привет! Это мое первое сообщение на форме, первая попытка подружиться с .net и соответственно первый блин
Подскажите пожалуйста, почему этот код выполняется синхронно и главное как его заставить выполниться асинхронно.
Спасибо!
using System.Windows;
using System.Net;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace AsyncFetch
{
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
private async void GetButtonClick(object sender, RoutedEventArgs e)
{
var urls = new List<string>
{
"http://msdn.microsoft.com",
"http://google.com",
"http://tumblr.com",
"http://bing.com",
"http://yandex.ru",
"http://dfbfgnbdsgv.com",
"http://ya.ru"
};
foreach (string url in urls)
{
dataTextBox.Text += url + "\r\n";
try
{
await DoDownloadAsync(url);
}
catch (WebException webExcp)
{
dataTextBox.Text += webExcp.Message.ToString();
}
}
}
async Task DoDownloadAsync(string url)
{
var req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "GET";
var task = req.GetResponseAsync();
var resp = (HttpWebResponse)await task;
dataTextBox.Text += resp.Headers.ToString();
// dataTextBox.Text += "Async download completed";
}
}
}Решение задачи: «Почему код выполняется синхронно?»
textual
Листинг программы
private async void GetButtonClick(object sender, RoutedEventArgs e)
{
var urls = new List<string>
{
"http://msdn.microsoft.com",
"http://google.com",
"http://tumblr.com",
"http://bing.com",
"http://yandex.ru",
"http://dfbfgnbdsgv.com",
"http://ya.ru"
};
var tasks = Task.WhenAll(urls.Select(DoDownloadAsync).ToList());
try
{
await tasks;
}
catch
{
dataTextBox.Text += string.Join(", ", tasks.Exception.Flatten().InnerExceptions.Select(ex => ex.Message));
}
}