ну так
IEnumerable<> и
yield вам в помощь. само собой и
async/
await
как раз эти четыре понятия и придназначены, для упрощения написания кода, над массивами даннх, растянутыми во времени, и не известной длинны. с их помощью, большая часть кода, выглядит так, будто все входные данные предоставлены сразу, и результат вы выдаете как будто тоже сразу
ps для практики полезны примеры из MSDN (где они есть) либо на
https://metanit.com/sharp/tutorial/ придется поискать. в любом случае, однозначно придется понять обсласти применения и возможности этих понятий. а тогда уже точно сложится картина, как они лягут на ваш конкретный случай
pps Ссылки от того куда положили возвращаем в виде коллекции тому кто нас вызвал.
вот это место не очень вписывается в концепцию конвеера на IEnumerable/yield/async/await
дело в том что результирующие ссылки, вы получаете "изредка", и явно в отрыве от момента получения исходного изображения
тут несколько путей:
- именно коллекцию ссылок (json?) формировать по окончанию обработоки
- возвращать в первоисточник ссылки по одной, и формировать коллекцию там, а привязку можно делать по имени/тегу/коду/номеру изображения.. (кадра?)
- можно и асинхронно, растянуто во времени досылать json, или любую выбранную коллекцию дотнета, если на приемнике дотнет, и вы так же правите исходниками
- как вариант, если известно количество кадров изначально, можно уведомлять первоисточнк о начале пересылки хоть массива заданной размерности, в любом понятном ему формате, если конечно он так же способенн к асинхронной обработке
pppsПробовал с BlockingCollection
повторюсь, на сколько я уловил вашу задачу, кроме IEnumerable<>, в подобном конвеере в принципе ни че больше не нужно. ну или разве что как вы там результат решите формировать. но и для результата, даже для накопителя, из дотнетовских конструкций, того же IEnumerable<> за уши, а из него, если кончно это требуется, можно и json формировать