Scala bounded worker pool collecting failures

Scala
import java.util.concurrent.{Callable, Executors, TimeUnit}
import scala.util.{Failure, Success, Try}

def runPool[A, B](tasks: Seq[() => A], workers: Int)(f: A => B): (Seq[B], Seq[Throwable]) =
  val pool = Executors.newFixedThreadPool(workers)
  try
    val futures = tasks.map(task => pool.submit(new Callable[B] { def call(): B = f(task()) }))
    val outcomes = futures.map(future => Try(future.get()))
    (outcomes.collect { case Success(value) => value },
     outcomes.collect { case Failure(error) => error })
  finally
    pool.shutdown()
    pool.awaitTermination(30, TimeUnit.SECONDS)