У меня есть следующий код в моем проекте консольного приложения:
static void Main()
{
Console.WriteLine($@"{Thread.CurrentThread.ManagedThreadId}, main");
var list = new List<Task<int>>();
for (int i = 1; i < 4; i++)
{
list.Add(GetValueAsync(i, i, i));
//list.Add(GetValueAsync());
}
var whenAll = Task.WhenAll(list);
whenAll.Wait();
Console.WriteLine(@"End program");
Console.ReadLine();
}
private static async Task<int> GetValueAsync(int val, int delay, int taskId)
{
Console.WriteLine($@"{Thread.CurrentThread.ManagedThreadId}, task{taskId} sleep");
await Task.Delay(1000 * delay);
Console.WriteLine($@"{Thread.CurrentThread.ManagedThreadId}, task{taskId} awake");
return val;
}
private static int index = 0;
private static async Task<int> GetValueAsync()
{
index++;
Console.WriteLine($@"{Thread.CurrentThread.ManagedThreadId}, task{index} sleep");
await Task.Delay(2000);
Console.WriteLine($@"{Thread.CurrentThread.ManagedThreadId}, task{index} awake");
return 10;
}
когда я использую GetValueAsync с параметрами , я получаю это:
когда я использую GetValueAsync без параметров я получаю это:
Почему часть кода после await Task.Delay(1000 * delay)
выполняется в том же потоке, когда я использую GetValueAsync(int val, int delay, int taskId)
? если я не ошибаюсь, часть после await должна выполняться в новом потоке ... (текущий проект - консольное приложение, основной поток - не поток GUI)