我正在按照文档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不等待?
您能指导我吗?我一直在寻找,但没有找到类似的问题来澄清问题