C# 等待任务数量可能不同的任务

C# 等待任务数量可能不同的任务,c#,.net-4.0,task,C#,.net 4.0,Task,我需要等待一个或多个任务完成。我需要等待的任务数量取决于几个条件。我的代码如下所示 Task[] tasks = new Task[2]; if (condition1 == true) { tasks[0] = Task.Factory.StartNew(() => MyMethod1()); } if (condition2 == true) { tasks[1] = Task.Factory.StartNew(() => MyMethod2()); } T

我需要等待一个或多个任务完成。我需要等待的任务数量取决于几个条件。我的代码如下所示

Task[] tasks = new Task[2];

if (condition1 == true)
{
    tasks[0] = Task.Factory.StartNew(() => MyMethod1());
}

if (condition2 == true)
{
    tasks[1] = Task.Factory.StartNew(() => MyMethod2());
}

Task.WaitAll(tasks);
假设
condition2
为false,因此任务数组中只有一项。在这种情况下,
WaitAll
是否只等待
tasks[0]

如果tasks数组的任何元素为null,则两者都会引发ArgumentException

为避免出现异常,您可以将任务添加到
列表中

List<Task> tasks = new List<Task>();

if (condition1)
{
    tasks.Add(Task.Factory.StartNew(() => MyMethod1()));
}

if (condition2)
{
    tasks.Add(Task.Factory.StartNew(() => MyMethod2()));
}

Task.WaitAll(tasks.ToArray());
List tasks=newlist();
如果(条件1)
{
tasks.Add(Task.Factory.StartNew(()=>MyMethod1());
}
如果(条件2)
{
tasks.Add(Task.Factory.StartNew(()=>MyMethod2());
}
Task.WaitAll(tasks.ToArray());

最好使用支持IEnumerable作为参数的WhenAll。这允许您使用不同于数组的容器,并将首先避免异常

List<Task> tasks= new List<Task>();

if (condition1)
{
    tasks.Add(Task.Factory.StartNew(() => MyMethod1()));
}

if (condition2)
{ 
    tasks.Add(Task.Factory.StartNew(() => MyMethod2()));
}

await Task.WhenAll(tasks);
List tasks=newlist();
如果(条件1)
{
tasks.Add(Task.Factory.StartNew(()=>MyMethod1());
}
如果(条件2)
{ 
tasks.Add(Task.Factory.StartNew(()=>MyMethod2());
}
等待任务。何时(任务);

另请参见

一个人不应该真正使用
WaitAll
(而不是
whalll
和适当的
async
/
wait
),但这确实是OP要求的正确答案。