Ответ 1
Только методы, объявляющие, что они возвращают IEnumerable<T>
, IEnumerable
, IEnumerator
или IEnumerator<T>
, могут быть реализованы с помощью блоков итератора. Это исключает все асинхронные методы.
В принципе, неясно, как они будут работать в любом случае, учитывая, что IEnumerable<T>
основан на pull-based, тогда как асинхронные методы более реактивны. Кроме того, точка блока итератора заключается в том, что вызывающие могут видеть промежуточные результаты, тогда как задача, возвращаемая методом асинхронизации, не будет завершена до тех пор, пока сам асинхронный метод не завершится.
Вам понадобится альтернативный подход - будь то Rx или что-то еще. Вы можете сначала подумать не о том, как будет выглядеть реализация, но о том, что сделает вызывающий. Возможно, вы действительно хотите IEnumerable<Task<List<T>>
?