Я тестирую асинхронный/ждущий и вот проблема. Я запускаю две задачи асинхронно и ожидаю завершения их выполнения. Я ожидаю, что две задачи будут ждать соответствующих задержек, а затем вернутся к печатным итоговым миллисекундам. Но программа печатает только 1 start " + current time
и 2 start " + current time
, но после этого ничего не происходит. Как я могу вернуться из заданий с задержкой и распечатать окончательный результат?Task.Delay не возвращается в основной поток
static void Main(string[] args)
{
RunTasksWithDelays();
}
static async void RunTasksWithDelays()
{
Stopwatch s = Stopwatch.StartNew();
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
Task task1 = LongRunningTask1();
Task task2 = LongRunningTask2();
await Task.WhenAll(task1, task2);
Console.WriteLine("total milliseconds elapsed: " + s.ElapsedMilliseconds/1000);
}
static async Task LongRunningTask1()
{
Console.WriteLine("1 start " + DateTime.Now);
await Task.Delay(5000);
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("1 end " + DateTime.Now);
}
static async Task LongRunningTask2()
{
Console.WriteLine("2 start " + DateTime.Now);
await Task.Delay(2000);
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("2 end " + DateTime.Now);
}
Это работает. Я знал, что мне нужно подождать, но не знаю, как это сделать в Майн. – Sam
Есть ли способ узнать, сколько потоков было порождено во время полного выполнения? – Sam
@Sam Нет, нет. Операция могла быть завершена без какой-либо одной нити или N числа потоков. Невозможно узнать (AFAIK). –