Канал моста к последовательности

Этот код основан на примере руководства Coroutines: Fan-out

val inputProducer = produce<String>(CommonPool) { (0..inputArray.size).forEach { send(inputArray[it]) } } val resultChannel = Channel<Result>(10) repeat(threadCount) { launch(CommonPool) { inputProducer.consumeEach { resultChannel.send(getResultFromData(it)) } } } 

Каков правильный способ создания Sequence<Result> , которая даст результаты?

Вы можете получить канал .iterator() из ReceiveChannel а затем перенести этот итератор канала в Sequence<T> , реализуя свой обычный Iterator<T> который блокирует ожидание результата по каждому запросу:

 fun <T> ReceiveChannel<T>.asSequence(context: CoroutineContext) = Sequence { val iterator = iterator() object : AbstractIterator<T>() { override fun computeNext() = runBlocking(context) { if (!iterator.hasNext()) done() else setNext(iterator.next()) } } } val resultSequence = resultChannel.asSequence(CommonPool)