Как написать метод, который запускает некоторые задачи асинхронно, проверяет результаты заданных задач, и как только задача возвращает true
, метод должен прекратить выполнение и вернуть результат.
Допустим, мы получили этоfunction:
private static async Task<bool> DummyFunction()
{
Random rand = new Random(DateTime.Now.Millisecond);
Thread.Sleep(rand.Next(1000, 10000));
return await Task.FromResult(rand.Next(100) % 2 == 0);
}
И следующий вызовет DummyFunction
private async Task<bool> RunDummy()
{
List<Task<bool>> tasks = new List<Task<bool>> { DummyFunction(), DummyFunction(), DummyFunction() };
while (tasks.Any())
{
Task<bool> currentTask = await Task.WhenAny(tasks);
if (await currentTask)
{
// do something ..., raise an event, call another method or whatever
// or simply just return
return true;
}
tasks.Remove(currentTask);
}
return false;
}
Я нашел здесь код RunDummy
где-то в stackoverflow.но это скорее работает синхронно.Я попытался отладить его и заметил, что он ожидает завершения каждой задачи, прежде чем приступить к следующей.
У меня вопрос: как запустить все задачи параллельно и прекратить выполнение при самом первом методе, который возвращаетtrue