为什么方法AwakeTest
需要3秒而不是一个
public static async void AwakeTest()
{
var Do1 = Sleep(1, 1);
var Do2 = Sleep(1, 2);
var Do3 = Sleep(1, 3);
await System.Threading.Tasks.Task.WhenAll(Do1, Do2, Do3);
Console.WriteLine(await Do1);
Console.WriteLine(await Do2);
Console.WriteLine(await Do3);
}
private static async System.Threading.Tasks.Task<int> Sleep(int Seconds, int ID)
{
if (Seconds < 0)
{
throw new Exception();
}
System.Threading.Thread.Sleep(Seconds * 1000);
return ID;
}
答案 0 :(得分:11)
由于Thread.Sleep
会休眠线程,并且每个Task
都不需要在单独的线程中运行,因此它会挂起整个线程。
您应该使用Task.Delay
代替:
await Task.Delay(Seconds * 1000);