Как работает async await? - C#
Формулировка задачи:
Не могу понять как все же отрабатывает async await. Насколько я понимаю их работу сначала должен отрабоать
"Запуск асинхронной задачи"
"Запуск асинхронного вызова"
потом управление передается вызывающией функции Main(), а выполнение GetStringAsync() продолжается в бэкграунде
"Продолжение программы"
"Асинхронная задача завершена"
В реальности все идет по другому:
"Запуск асинхронной задачи"
"Запуск асинхронного вызова"
"Асинхронная задача завершена"
"Продолжение программы"
т.е так как если бы это был блокирующий код. Что я делаю не так?
class Program { static void Main(string[] args) { Console.WriteLine("Запуск асинхронного вызова"); MethodAsync(); Console.WriteLine("Продолжение программы"); } static async void MethodAsync() { Task<string> returnedTaskResult = GetStringAsync(); string str = await returnedTaskResult; //или так string str = await GetStringAsync(); Console.WriteLine(str); } static async Task<string> GetStringAsync() { Console.WriteLine("Запуск асинхронной задачи"); for (int i = 0; i < 1000000000; ++i) { } return "Асинхронная задача завершена"; } }
Решение задачи: «Как работает async await?»
textual
Листинг программы
return Task.Run(delegate { for (int i = 0; i < 10000000; ++i) { } return "Асинхронная задача завершена"; });
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д