У меня есть простая программа для тестирования async / await, 2 версии: версия 1 ожидает другого метода внутри асинхронной функции, версия не:
Программа 1:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("main starts..");
AsyncMethod();
Thread.Sleep(1000);
Console.WriteLine("main ends..");
Console.ReadLine();
}
static async void AsyncMethod()
{
Console.WriteLine("async starts");
var result = await MyMethod();
Console.WriteLine("async starts ends");
}
static async Task<int> MyMethod()
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine("async runs" + i.ToString() + "..");
await Task.Delay(1000);
}
return 0;
}
}
Программа2:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("main starts..");
AsyncMethod();
Thread.Sleep(1000);
Console.WriteLine("main ends..");
Console.ReadLine();
}
static async void AsyncMethod()
{
Console.WriteLine("async starts");
for (int i = 0; i < 5; i++)
{
Console.WriteLine("async runs" + i.ToString() + "..");
await Task.Delay(1000);
}
Console.WriteLine("async ends");
}
}
Обе программы дают одинаковый результат.Мне просто любопытно, отличаются ли обе программы тем, что происходит в фоновом режиме?
Полагаю, программа 1 создаст 2 подпотока, каждый уровень асинхронности ведет к потоку;Программа 2 создаст 1 подпоток.Правильно?
До тех пор, пока "ожидание" будет ждать, пока задача не закончится, в чем же отличие от написания синхронного кода?Я думаю, что это просто ссылка, создающая несколько потоков, и вызов ".join ()" для всех из них.Правильно?