Fixed-size thread pool returning Kotlin Results
Kotlin
import java.util.concurrent.Callable
import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit
fun <T> runPool(tasks: List<() -> T>, workers: Int = 4): List<Result<T>> {
require(workers > 0) { "workers must be positive" }
val pool = Executors.newFixedThreadPool(workers)
return try {
val futures = tasks.map { task -> pool.submit(Callable { runCatching { task() } }) }
futures.map { it.get(30, TimeUnit.SECONDS) }
} finally {
pool.shutdownNow()
}
}
val results = runPool(listOf({ 1 + 1 }, { error("boom") }))
println(results.map { it.getOrElse { e -> e.message } })