Асинхронное программирование await async - C#
Формулировка задачи:
Всем привет!
Пытаюсь разобраться с асинхронным вызовом методов. Узнал такую вещь: если предполагается, что некоторый метод может долго выполнятся, то его можно перенести в "фоновое" выполнение, а управление отдать в вызывающий метод. Решил разобраться с этим и написал для начала обычный код без асинхронного программирования.
Здесь вроде все понятно, пока загружается 100мб файл, соответственно остальные инструкции в методе Download() не выполняются до окончания загрузки. То есть идет последовательное выполнение. Далее я решил поэкспериментировать с await и async и написал следующий код:
Как видно, логика кода такая же, только добавлены await и async и под них изменен метод на DownloadDataTaskAsync.
В этом коде я ожидал такое поведение:
1. Файл начинает скачиваться.
2. Так как закачка переходит в фоновый режим, то управление возвращается методу Download(), и следовательно выводится на консоль Welcome to Hell.
3. По окончании загрузки файла выводится результат Length.
Однако всего этого не происходит, а вместо этого просто запускается консоль без единого сообщения, кроме того, чтобы я нажал эникей. Почему так происходит, или где я ошибся в коде?
Спасибо.
class Test { public static void Download() { WebClient wc = new WebClient(); byte[] data = wc.DownloadData(@"http://www.ukraine.com.ua/static/100MB.bin"); Console.WriteLine("Welcome to"); Console.WriteLine("Hell"); Console.WriteLine(data.Length); } static void Main() { Download(); } }
class Test { public async static void Download() { WebClient wc = new WebClient(); byte[] data = await wc.DownloadDataTaskAsync(@"http://www.ukraine.com.ua/static/100MB.bin"); Console.WriteLine("Welcome to"); Console.WriteLine("Hell"); Console.WriteLine(data.Length); } static void Main() { Download(); } }
Решение задачи: «Асинхронное программирование await async»
textual
Листинг программы
class Program { public async static void Download() { WebClient wc = new WebClient(); var task = wc.DownloadDataTaskAsync(@"http://www.ukraine.com.ua/static/100MB.bin"); Console.WriteLine("Welcome to"); Console.WriteLine("Hell"); byte[] data = await task; Console.WriteLine(data.Length); } static void Main() { Download(); while(true) Thread.Sleep(1000);//ждем } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д