等待任务数量可能不同的任务
Waiting on tasks where number of tasks could vary
我需要等待一项或多项任务完成。我需要等待的任务数取决于一些条件。所以我的代码如下所示。
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
为假,因此任务数组中只有一项。在这种情况下 WaitAll
只会等待 tasks[0]
吗?
如果 tasks 数组的任何元素为 null,两者 Task.WaitAll and Task.WhenAll 都会抛出 ArgumentException。
为避免异常,您可以将任务添加到 List<Task>
:
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());
最好使用支持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);
另见 WaitAll vs WhenAll
我需要等待一项或多项任务完成。我需要等待的任务数取决于一些条件。所以我的代码如下所示。
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
为假,因此任务数组中只有一项。在这种情况下 WaitAll
只会等待 tasks[0]
吗?
如果 tasks 数组的任何元素为 null,两者 Task.WaitAll and Task.WhenAll 都会抛出 ArgumentException。
为避免异常,您可以将任务添加到 List<Task>
:
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());
最好使用支持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);
另见 WaitAll vs WhenAll