[英]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.