Скажем, у меня есть две задачи, с учетом следующих требований:Подождите только одна задача завершить
- Оба являются асинхронными.
- Оба запускаются параллельно
- В тот момент, когда один из них завершается, мне нужно знать, что он сделал.
Я придумал следующий код, но он просто зависает после запуска обеих задач (функция WaitAny никогда не возвращается). Я также получаю squiggly строку под функцией Run, говорящей мне добавить ожидание внутри него, но VS жалуется, когда я пытаюсь добавить его перед Task.WaitAny. Должен ли я обернуть WaitAny в другую задачу? Что я делаю не так?
async void Run()
{
Task task1 = Task1();
Task task2 = Task2();
int completedTaskIdx = Task.WaitAny(task1, task2);
Debug.WriteLine("completedTaskIdx = {0}", completedTaskIdx.ToString());
}
async Task Task1()
{
Debug.WriteLine("Task 1 Start");
await Task.Delay(5000);
Debug.WriteLine("Task 1 Stop");
}
async Task Task2()
{
Debug.WriteLine("Task 2 Start");
await Task.Delay(10000);
Debug.WriteLine("Task 2 Stop");
}
try ** WhenAny ** – Eser
@Eser Я действительно посмотрел на него, но он не возвращает индекс завершенной задачи. – Eternal21
@ Eternal21 Ваше требование 3. не говорило, что вам нужно знать индекс завершенной задачи, только какие задачи были выполнены. Он делает это, возвращая завершенную задачу. –