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