Como obter exceções lançadas em um Scala Future?

Eu tenho trabalhado minha resposta paraxiste uma função Scala padrão para executar um bloco com um tempo limit e encontrar um problema se uma exceção for lançada em um futur

  def runWithTimeout[T](timeoutMs: Long)(f: => T) : Option[T] = {
    awaitAll(timeoutMs, future(f)).head.asInstanceOf[Option[T]]
  }

De modo

runWithTimeout(50) { "result" } should equal (Some("result"))
runWithTimeout(50) { Thread.sleep(100); "result" } should equal (None)

Mas se eu lançar uma exceção no meu bloco, ela não vazará, mas será engolida - para que o seguinte falhe com "..nenhuma exceção foi lançada"

intercept[Exception] {
    runWithTimeout(50) { throw new Exception("deliberate") }
}.getMessage should equal("deliberate")

Syserr possui um rastreamento de pilha com a mensagem

<function0>: caught java.lang.Exception: deliberate

mas não consigo encontrar o local do tempo de execução do Scala impress

lém de embrulhar f em outro bloco que captura exceções e as propaga se lançadas, existe alguma maneira de convencer waititAll e / ou Future a lança

questionAnswers(6)

yourAnswerToTheQuestion