У меня есть приложение, которое использует MEF для загрузки плагинов. Все эти плагины соответствуют следующему интерфейсу:
public interface IPlugin {
Task Start();
}
Все методы реализованы как async
: public async Task Start()
Когда приложение работает, у меня есть свойство IEnumerable<IPlugin>
, доступное для всех плагинов. Вопрос в том, как я могу запустить все методы Start()
параллельно и ждать, пока все методы не будут завершены?
Я знаю о Parallel.ForEach(plugins, plugin => plugin.Start())
, но это не ожидаемо, и выполнение продолжается до запуска всех плагинов.
Наиболее многообещающим решением, похоже, является Task.WhenAll()
, но я не знаю, как отправить в него неизвестный список методов без добавления каких-либо строительных лесов (что выглядит как накладные расходы).
Как мне это сделать?