I have the following code:
List<Task<bool>> tasks = tasksQuery.ToList();
while (tasks.Any())
{
Task<bool> completedTask = await Task.WhenAny(tasks);
if (await completedTask)
return true;
tasks.Remove(completedTask);
}
It launches tasks in parallel. When first completed task returns true, the method returns true.
My questions are:
- What happens with all remaining tasks that have been launched and probably still running in the background?
- Is this the right approach to execute a code that is async, parallel and should return after the first condition occurs, or it is better to launch them one by one and await singularly?