这就是并行的原因。调用不要等待我的任务完成

时间:2019-07-01 02:32:18

标签: c# .net

我正在按照文档here所述并行练习运行方法

  

所有任务完成后,Invoke方法返回。

所以我正在测试以下代码

   static async Task Main(string[] args)
    {
        DateTime start = DateTime.Now;
        Parallel.Invoke(async () => await BasicAction(), async () => await  BasicAction2());
        DateTime end = DateTime.Now;

        var parallel = end.Subtract(start).TotalSeconds;

        Console.WriteLine("Parallel:{0}", parallel.ToString());

        Console.Read();
    }
    static async Task BasicAction()
    {
        for (int i = 0; i < 1000; i++)
        {

            await Task.Delay(1);

        }

        Console.WriteLine("End 1");
    }

    static async Task BasicAction2()
    {
        for (int i = 0; i < 1000; i++)
        {
            await Task.Delay(1);
        }

        Console.WriteLine("End 2");

    }

令我惊讶的是,其中有1个任务使Await进入Parallel.Invoke之后,主线程跟随其执行,总之,我收到以下命令的执行:

        DateTime end = DateTime.Now;

        var parallel = end.Subtract(start).TotalSeconds;

        Console.WriteLine("Parallel:{0}", parallel.ToString());

        Console.Read();

应注意,BasicAction()和BasicAction2()仍在运行。

我知道Task.WhenAll的存在能够等待一系列任务,但是我想知道为什么parallel.Invoke不等待?

您能指导我吗?我一直在寻找,但没有找到类似的问题来澄清问题

0 个答案:

没有答案