Как работает 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 "Асинхронная задача завершена";
- });
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д