繁体   English   中英

为什么要使Tasks并行运行需要显式Task变量?

[英]Why is an explicit Task variable required to get Tasks to run in parallel?

我正在尝试使用await使一些数据库数据检索任务并行运行。 由于某些原因,它仅在我显式创建Task变量的情况下有效,而在我直接等待返回那些Tasks的方法时则无效。

我在下面的控制台应用程序中有问题的示例:

class Program
{
    static async Task Main(string[] args)
    {
        //This runs sequentially
        await Write("Task 1");
        await Write("Task 2");
        await Write("Task 3");


        //This runs in parallel
        var t1 = Write("Task 1");
        var t2 = Write("Task 2");
        var t3 = Write("Task 3");
        await t1;
        await t2;
        await t3;

        Console.ReadKey();
    }

    static async Task Write(string text)
    {
        Console.WriteLine($"Start - {text}");
        await Task.Delay(1000);
        Console.WriteLine($"End - {text}");
    }
}

我希望这两种方法都能产生完全相同的结果。

TAP模式指定“热”(即正在进行)返回任务。 await将暂停当前方法,直到其参数完成

因此,此代码将调用Write ,它返回正在进行的任务。 然后, await将暂停当前方法,直到该任务完成:

await Write("Task 1");

或者,此代码将调用Write ,它返回正在进行的任务。 然后将该任务放置到变量中。 由于没有await ,因此该方法不会暂停:

var t1 = Write("Task 1");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM