nulldev
11/03/2018, 9:20 PMselect
on send
. I just allocated an output and input channel for each worker:
suspend fun invoke(input: InputType): OutputType {
return selectUnbiased {
for(worker in runningWorkers) {
worker.inputChannel.onSend(input) {
worker.outputChannel.receive()
}
}
}
}
Zach Klippenstein (he/him) [MOD]
11/04/2018, 6:29 PMdata class WorkerTask(val input: InputType) {
val output = CompletableDeferred<OutputType>
}
class WorkerPool {
val chanToWorkers = Channel<WorkerTask>()
suspend fun doStuff(input: InputType): OutputType {
val task = WorkerTask(input)
chanToWorkers.send(task)
return task.output.await()
}
}