Как работает 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 "Асинхронная задача завершена";
            });

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5