Трейт scala.concurrent.BlockContext
трейт BlockContext
Контекст, который уведомляется scala.concurrent.blocking, когда поток собирается заблокироваться. По сути, этот трейт предоставляет реализацию для scala.concurrent.Await. scala.concurrent.Await.result и scala.concurrent.Await.ready находит экземпляр BlockContext, сначала ища его в предоставленном через BlockContext.withBlockContext, а при отсутствии проверяя, является ли Thread.currentThread экземпляром BlockContext. Таким образом, пул потоков может иметь свои экземпляры java.lang.Thread, реализующие BlockContext. Если поток не реализует BlockContext, используется по умолчанию BlockContext.
Обычно вам нужно будет подключиться к предыдущему BlockContext, например так:
val oldContext = BlockContext.current
val myContext = new BlockContext {
override def blockOn[T](thunk: => T)(implicit permission: CanAwait): T = {
// you'd have code here doing whatever you need to do
// when the thread is about to block.
// Then you'd chain to the previous context:
oldContext.blockOn(thunk)
}
}
BlockContext.withBlockContext(myContext) {
// then this block runs with myContext as the handler
// for scala.concurrent.blocking
}
| Суперобъекты |
|---|
Абстрактные методы
Исходный код
Используется во внутренней работе фреймворка; обозначает (и, в конечном счёте, выполняет) лямбда-выражение, которое потенциально блокирует вызывающий java.lang.Thread.
Клиенты должны использовать scala.concurrent.blocking или scala.concurrent.Await вместо этого.
В реализациях этого метода РЕКОМЕНДУЕТСЯ сначала проверить, является ли permission null, и если это так, выбросить IllegalArgumentException.
| Исключения |
|
|---|
© 2002-2022 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://scala-lang.org/api/3.1.1/scala/concurrent/BlockContext.html