У меня есть метод с этим возвращаемым типом:Как включить async перечисления?
public async Task<IEnumerable<T>> GetAll()
Это делает еще несколько асинхронных вызовов (неизвестное количество), каждый из которых возвращает задачу перечислимого T, а затем хочет Concat результатов для возвращения.
var data1 = src1.GetAll();
var data2 = src2.GetAll();
var data3 = src3.GetAll(); //and so on
Теперь это достаточно легко, чтобы ждать всех и CONCAT результатов для производства сингл перечислимы, но я хотел бы перечислимое быть доступны, как только первые возвращения вызовов, с потенциальными ждет вызывающего абонента/перечислителем если какие-либо вызовы все еще ожидаются, когда закончились доступные результаты.
Нужно ли мне ручным конкатентом для этого, работая над отсутствием поддержки перечислителя, когда оно завернуто в задачу <>? Или уже есть вызов библиотеки в TPL или в другом месте, что могло бы мне помочь. Я смотрел на IX, но он все еще находится на экспериментальном выпуске и не хочет его сбрасывать.
На боковой ноте, что я пробовал против шаблона? Я могу придумать одно осложнение, обработку исключений - со стороны вызывающего абонента, вызов может завершиться успешно, и он начнет использовать перечислимый, но он может взорваться на полпути через это ...
(Как примечание) Ваш шаблон кажется асимметричным: код _ ожидает, что первая последовательность будет готова, но не ждет остальное. – Vlad
Возможно, вам действительно нужно 'IObservable'? В этом случае вы можете просто использовать [Observable.Concat'] (https://msdn.microsoft.com/en-us/library/system.reactive.linq.observable.concat%28v=vs.103%29.aspx). –
Vlad
@ Vlad: Хорошая точка. Я думал об этом, когда смотрел в Ix/Rx, и я согласен, реактивный, как правило, лучше подходит для этого типа прецедентов. Но общий сценарий и приложение являются основанными на тяге, и я не хочу бросать в Rx-молот, чтобы вернуться к перечисляемым из наблюдаемого результата. – Vivek