com.twitter.util.Await не вызывает исключение com.twitter.util.TimeoutException
Я ожидаю, что этот код вызовет TimeoutException, но это не так. Что я делаю не так?
import com.twitter.conversions.time._
import com.twitter.util.{Await, Future}
object Tmp {
def main(args: Array[String]): Unit = {
Await.result(
Future{
Thread.sleep(10000000)
},
1 second
)
}
}
1 ответ
Скаладок Future.apply
Метод имеет примечание, в котором говорится:
a
выполняется в вызывающем потоке, и поэтому необходимо соблюдать осторожность с кодом блокировки.
Поэтому в общем случае вы не должны выполнять операции блокировки с фьючерсами.
Если вы хотите сделать блокировку звонков, вы должны использовать com.twitter.util.FuturePool
, Дополнительные сведения о выполнении блокирующих вызовов можно найти в разделе " Блокировка или синхронная работа " документации Twitter Util.
Итак, ваш код может выглядеть так:
import com.twitter.conversions.time._
import com.twitter.util.{Await, FuturePool}
object Tmp {
def main(args: Array[String]): Unit = {
Await.result(
FuturePool.unboundedPool {
Thread.sleep(5000)
},
1 second
)
}
}
В этом примере я использовал unboundedPool
в качестве быстрого примера. Но, пожалуйста, проверьте документацию FuturePool для поиска подходящего FuturePool
для вашего использования.