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# Task.WhenAll-何时使用此_C#_Multithreading_Task Parallel Library_Task - Fatal编程技术网

C# Task.WhenAll-何时使用此

C# Task.WhenAll-何时使用此,c#,multithreading,task-parallel-library,task,C#,Multithreading,Task Parallel Library,Task,我知道(Task1、Task2)会等待所有提供的任务对象完成执行 Task.Wheall的用途是什么 在MSDN中说 创建一个任务,该任务将在提供的所有任务完成后完成 完成 在现实世界中,once可以应用Task。WhenAll()WaitAll阻止调用线程,而WhenAll提供一个promise任务,您可以使用它来使用async wait异步等待等待,而不会同时浪费线程: async Task ProcessAsync() { await Task.WhenAll(DownloadAs

我知道(Task1、Task2)会等待所有提供的任务对象完成执行

Task.Wheall的用途是什么

在MSDN中说

创建一个任务,该任务将在提供的所有任务完成后完成 完成


在现实世界中,once可以应用Task。WhenAll()

WaitAll
阻止调用线程,而
WhenAll
提供一个promise任务,您可以使用它来使用
async wait
异步等待等待,而不会同时浪费线程:

async Task ProcessAsync()
{
    await Task.WhenAll(DownloadAsync(), IntializeParserAsync(),...);
}

您应该在任何需要等待的地方使用
whalll
,而不必阻塞线程,这样可以提高可伸缩性。(阅读:几乎可以在任何地方)

WaitAll
阻止调用线程,而
whalll
提供了一个承诺任务,您可以使用
异步等待异步等待而不会同时浪费线程:

async Task ProcessAsync()
{
    await Task.WhenAll(DownloadAsync(), IntializeParserAsync(),...);
}

您应该在任何需要等待的地方使用
whalll
,而不必阻塞线程,这样可以提高可伸缩性。(阅读:几乎可以在任何地方)

WaitAll
是一个
void
函数,它允许您的代码在调用它时立即等待多个任务的完成

另一方面,
whalll
生成一个
任务
,该任务将在运行时等待其他任务。例如,如果您正在构建一个
任务
,该任务需要初始化几件事情,然后运行一些计算,您可以这样做:

var initThenRun = Task
    .WhenAll(initTask1, initTask2, initTask3)
    .ContinueWith(computationTask);

现在,
initThenRun
任务将运行这三个初始化任务,等待它们全部完成,然后再继续执行
computationTask
WaitAll
是一个
void
函数,它允许您的代码在调用它时立即等待多个任务的完成

另一方面,
whalll
生成一个
任务
,该任务将在运行时等待其他任务。例如,如果您正在构建一个
任务
,该任务需要初始化几件事情,然后运行一些计算,您可以这样做:

var initThenRun = Task
    .WhenAll(initTask1, initTask2, initTask3)
    .ContinueWith(computationTask);

现在,
initThenRun
任务将运行三个初始化任务,等待它们全部完成,然后再继续执行
computationTask

,那么
task.Factory.continuewhalll(新任务[]{initTask1,initTask2,initTask3},computationTask)
@KevinBui,因为这是一个不同的问题,把它当作一个问题,而不是一个评论。这将使你的问题更加直观,潜在地导致更好的答案。因此,与<代码>任务>工厂。ContinueWhenAll(新任务[]{IITTASK1,IITTASK2,IITTASK3},计算任务)< /代码> @ KevinBui,因为这是一个不同的问题,考虑把它作为一个问题,而不是作为一个评论。这将使您的问题更具可视性,有可能得到更好的答案。