同时运行任务.NET 4.5

时间:2015-04-15 09:53:51

标签: c# async-await task-parallel-library task

为什么方法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;
}

1 个答案:

答案 0 :(得分:11)

由于Thread.Sleep会休眠线程,并且每个Task都不需要在单独的线程中运行,因此它会挂起整个线程。

您应该使用Task.Delay代替:

await Task.Delay(Seconds * 1000);