Task firstFinishedTask = Task.WhenAny(tasks);
Это ужасно неправильно названная переменная. Task.WhenAny
возвращает Task<Task>
. external Task
завершается, когда завершается любая из задач, переданных в WhenAny
. inner Task
- это задача, которая привела к этому. WhenAny
само по себе не выполняет никаких ожиданий.
Обычный *1015* способ использования WhenAny
состоит в том, чтобы использовать его с await
- который всегда удаляет внешний Task
из того, что вы передаете, и возвращает вам внутреннее содержимое.
Если вы не хотите использовать WhenAny
с await
, вы можете вместо этого искать WaitAny
- который блокирует ваш текущий поток [:-(] и возвращает вам индекс вместо Task
, но, по крайней мере, позаботится о том, чтобы на самом деле ожидал , пока одна из задач, которую вы передали, была выполнена (но, как сказал ответ, я бы предпочел увидеть await Task.WhenAny(tasks)
, чтобы освободить вверх по этой теме)
tasks
не содержит внешнего Task
, созданного WhenAny
- поэтому ваша попытка Remove
не удалась.