Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么';WhenAll(任务列表)和WhenAll(任务列表).Wait()之间的区别是什么?_C#_Multithreading_Async Await_Task_Wait - Fatal编程技术网

C# 什么';WhenAll(任务列表)和WhenAll(任务列表).Wait()之间的区别是什么?

C# 什么';WhenAll(任务列表)和WhenAll(任务列表).Wait()之间的区别是什么?,c#,multithreading,async-await,task,wait,C#,Multithreading,Async Await,Task,Wait,例如,它们之间的区别是什么 Task<DataSet> DBTask = Task.Run (() => DBHelper.DbTest ()); Task<Boolean> CheckTimeTask = Task.Run (() => Module.CheckTime ()); Task.WhenAll (DBTask, CheckTimeTask); // <-- no wait? i

例如,它们之间的区别是什么

        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 DBTask=Task.Run(()=>DBHelper.DbTest());
Task CheckTimeTask=Task.Run(()=>Module.CheckTime());
Task.WhenAll(DBTask,CheckTimeTask);//DBHelper.DbTest());
Task CheckTimeTask=Task.Run(()=>Module.CheckTime());

Task.WhenAll(DBTask,CheckTimeTask).Wait();// Task.WhenAll是一个异步函数,它返回一个新任务,该任务将在所有后续任务完成后完成

Task.WhenAll().Wait实际上是在移动到下一行代码之前等待所有后续任务完成

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

以下是一些额外的信息链接:


如前所述,您的问题毫无意义,因为
Task.WhenAll()
只返回一个
Task
对象,该对象表示传递给它的所有
Task
对象的异步完成。您的代码将丢弃返回的
任务
对象,这意味着
任务
将保持不被观察状态,并且对程序没有任何影响。一个正确编写的程序将在该语句上使用
Wait
,而副本正好解释了这与使用
Wait()
之间的区别。
        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 ();
        }