运行 同时执行任务 .NET 4.5
Running Tasks simultaneously .NET 4.5
为什么方法 AwakeTest
需要 3 秒而不是 1 秒
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;
}
由于 Thread.Sleep
使线程休眠,并且每个 Task
不需要 运行 在单独的线程中,它会挂起整个线程。
您应该改用 Task.Delay
:
await Task.Delay(Seconds * 1000);
为什么方法 AwakeTest
需要 3 秒而不是 1 秒
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;
}
由于 Thread.Sleep
使线程休眠,并且每个 Task
不需要 运行 在单独的线程中,它会挂起整个线程。
您应该改用 Task.Delay
:
await Task.Delay(Seconds * 1000);