`WhenAll(TaskList)` 和 `WhenAll(TaskList).Wait()` 有什么区别?

What's the difference between `WhenAll(TaskList)` and `WhenAll(TaskList).Wait()`?

比如

有什么区别
        Task<DataSet> DBTask = Task.Run (() => DBHelper.DbTest ());
        Task<Boolean> CheckTimeTask = Task.Run (() => Module.CheckTime ());
        Task.WhenAll (DBTask, CheckTimeTask); // <-- no wait?
        if (!CheckTimeTask.Result || DBTask.Result == null)
        {
            Close ();
        }   

        Task<DataSet> DBTask = Task.Run (() => DBHelper.DbTest ());
        Task<Boolean> CheckTimeTask = Task.Run (() => Module.CheckTime ());
        Task.WhenAll (DBTask, CheckTimeTask).Wait (); // <-- wait ?
        if (!CheckTimeTask.Result || DBTask.Result == null)
        {
            Close ();
        }  

好像都在等结果返回?我无法找出差异,所以哪个更好?

Task.WhenAll 是一个异步函数,它 returns 一个新任务,它将在所有后续任务完成后完成。

Task.WhenAll().Wait实际上是在等待所有后续任务完成后才转到下一行代码。

在您的示例中,我确定您遇到了竞争条件,即两个示例都产生了相同的调试结果。但是, Task.WhenAll 本身没有 .Wait 实际上是异步的,如果后续任务尚未完成,将不会停止进一步的代码执行。

这里有一些额外的信息链接: