Проблема, которую мне нужно решить, состоит в том, чтобы иметь разные вызовы, которые возвращают задачи, но они могут содержать или не содержать базовый или некоторый производный класс, а затем ожидать все эти вызовы, прежде чем продолжить.
Следующее, нерабочий, код иллюстрирует проблему:
class Base {
}
class Derived : Base {
}
public void Main() {
List<Task<Base>> taskList = new List<Task<Base>>();
for ( var i = 1; i < 10; i++) {
switch (i%2) {
case 0:
taskList.Add(GetDerivedAsync());
break;
default:
taskList.Add(GetBaseAsync());
break;
}
}
Task.WhenAll(taskList);
}
Приведенный выше код не работает, потому что вы не можете добавить Task<Derived>
в список Task<Base>
.
Как я могу сделать кучу асинхронных вызовов, чей возвращаемый объект является полиморфным по своей природе, добавить их в список и затем ждать их всех перед продолжением кода?