Трейт scala.concurrent.Future
Компаньон объект Future
трейт Future[+T] extends Awaitable[T]
Члены-значения абстрактные
abstract def isCompleted: Boolean
Возвращает, завершен ли в будущем результат или исключение.
Примечание: использование этого метода приводит к недетерминированным программам с потоками данных.
- returns
trueесли будущее завершено,falseв противном случае
abstract def onComplete[U](f: (Try[T]) ⇒ U)(implicit executor: ExecutionContext): Unit
При завершении этого будущего, либо через исключение, либо через значение, примените предоставленную функцию.
Если будущее уже завершено, это будет применено немедленно или запланировано асинхронно.
Обратите внимание, что возвращаемое значение f будет проигнорировано.
Поскольку этот метод выполняется асинхронно и не возвращает значение, любые некритические исключения будут сообщены ExecutionContext.
Может быть зарегистрировано несколько обратных вызовов; нет гарантии, что они будут выполнены в определённом порядке.
Предоставленный обратный вызов всегда выполняется в предоставленном неявном ExecutionContext, хотя нет гарантии, что метод execute() объекта ExecutionContext будет вызван один раз на каждый обратный вызов или что execute() будет вызван в текущей нити. То есть, реализация может выполнить несколько обратных вызовов в группе в рамках одного execute() и может выполнить execute() немедленно или асинхронно. Завершение Future должно *предшествовать* вызову обратного вызова.
- U
используется только для принятия любого возвращаемого типа заданной функции обратного вызова
- f
функция, которая должна быть выполнена при завершении этого
Future
abstract def ready(atMost: Duration)(implicit permit: CanAwait): Future.this.type
Дождитесь состояния "завершено" этого Awaitable.
Этот метод не следует вызывать напрямую; используйте Await.ready вместо этого.
- atMost
максимальное время ожидания, которое может быть отрицательным (ожидание не выполняется), Duration.Inf для неограниченного ожидания или конечное положительное время
- returns
это
Awaitable
- Definition Classes
- Awaitable
- Annotations
- @throws( clazz = classOf[TimeoutException] ) @throws( clazz = classOf[InterruptedException] )
- Исключения
-
IllegalArgumentExceptionеслиatMostравно Duration.UndefinedInterruptedExceptionесли текущая нить прервана во время ожиданияTimeoutExceptionесли после ожидания в течение указанного времени этоAwaitableвсё ещё не готово
abstract def result(atMost: Duration)(implicit permit: CanAwait): T
Дождитесь и верните результат (типа T) этого Awaitable.
Этот метод не следует вызывать напрямую; используйте Await.result вместо этого.
- atMost
максимальное время ожидания, которое может быть отрицательным (ожидание не выполняется), Duration.Inf для неограниченного ожидания или конечное положительное время
- returns
значение результата, если
Awaitableзавершается в течение указанного максимального времени ожидания
- Definition Classes
- Awaitable
- Annotations
- @throws( clazz = classOf[TimeoutException] ) @throws( clazz = classOf[InterruptedException] )
- Исключения
-
IllegalArgumentExceptionеслиatMostравно Duration.UndefinedInterruptedExceptionесли текущая нить прервана во время ожиданияTimeoutExceptionесли после ожидания в течение указанного времени этоAwaitableвсё ещё не готово
abstract def transform[S](f: (Try[T]) ⇒ Try[S])(implicit executor: ExecutionContext): Future[S]
Создаёт новое будущее, применяя указанную функцию к результату этого будущего. Если при применении 'f' возникает какое-либо некритическое исключение, то это исключение будет передано в результирующее будущее.
- S
тип возвращаемого
Future- f
функция, преобразующая результат этого будущего
- returns
будущее, которое будет завершено преобразованным значением
abstract def transformWith[S](f: (Try[T]) ⇒ Future[S])(implicit executor: ExecutionContext): Future[S]
Создаёт новый Future, применяя указанную функцию, которая возвращает Future, к результату этого Future. Если при применении 'f' возникает какое-либо некритичное исключение, то это исключение будет передано в результирующее future.
- S
тип возвращаемого
Future- f
функция, преобразующая результат этого future
- returns
a
Future, который будет завершён преобразованным значением
abstract def value: Option[Try[T]]
Текущее значение этого Future.
Примечание: использование этого метода приводит к недетерминированным программам с потоком данных.
Если future не был завершён, возвращаемое значение будет None. Если future был завершён, значение будет Some(Success(t)), если оно содержало действительный результат, или Some(Failure(error)), если оно содержало исключение.
- returns
NoneеслиFutureне был завершён,Someесли был.
Члены-значения (Concrete Value Members)
final def !=(arg0: Any): Boolean
Проверка двух объектов на неравенство.
- возвращает
trueесли !(this == that), в противном случае false.
- Определяющие классы
- AnyRef → Any
final def ##(): Int
Эквивалентно x.hashCode за исключением упакованных числовых типов и null. Для числовых типов возвращает хэш-значение, согласованное с равенством значений: если два экземпляра типа значения сравниваются как true, тогда ## для каждого из них вернёт одинаковое хэш-значение. Для null возвращает хэш-код, где null.hashCode вызывает NullPointerException.
- возвращает
хэш-значение, согласованное с ==
- Определяющие классы
- AnyRef → Any
def +(other: String): String
- Неявный
- Этот член добавлен неявным преобразованием из Future[T] в any2stringadd[Future[T]], выполненное методом any2stringadd в scala.Predef.
- Определяющие классы
- any2stringadd
def ->[B](y: B): (Future[T], B)
- Неявный
- Этот член добавлен неявным преобразованием из Future[T] в ArrowAssoc[Future[T]], выполненное методом ArrowAssoc в scala.Predef.
- Определяющие классы
- ArrowAssoc
- Аннотации
- @inline()
final def ==(arg0: Any): Boolean
Выражение x == that эквивалентно if (x eq null) that eq null else x.equals(that).
- возвращает
trueесли объект-получатель эквивалентен аргументу;falseв противном случае.
- Определяющие классы
- AnyRef → Any
def andThen[U](pf: PartialFunction[Try[T], U])(implicit executor: ExecutionContext): Future[T]
Применяет функцию со побочными эффектами к результату этого будущего и возвращает новое будущее с результатом этого будущего.
Этот метод позволяет гарантировать выполнение обратных вызовов в заданном порядке.
Обратите внимание, что если один из цепочечных andThen обратных вызовов выбрасывает исключение, это исключение не распространяется на последующие andThen обратные вызовы. Вместо этого последующие andThen обратные вызовы получают исходное значение этого будущего.
Следующий пример выведет 5:
val f = Future { 5 }
f andThen {
case r => sys.error("runtime exception")
} andThen {
case Failure(t) => println(t)
case Success(v) => println(v)
}
Поскольку этот метод выполняется асинхронно и не возвращает значение, любые некритические исключения, сгенерированные в нём, будут сообщены ExecutionContext.
- U
используется только для принятия любого типа возвращаемого значения заданного
PartialFunction- pf
частичная функция
PartialFunction, которая будет условно применена к результату этогоFuture- возвращает
будущее
Future, которое будет завершено с тем же самым результатом, что и этоFuture, но после выполненияPartialFunction
final def asInstanceOf[T0]: T0
Преобразовать объект-получатель к типу T0.
Обратите внимание, что успех преобразования во время выполнения зависит от семантики стирания Scala. Поэтому выражение 1.asInstanceOf[String] выбросит ClassCastException во время выполнения, в то время как выражение List(1).asInstanceOf[List[String]] не выбросит. В последнем примере, так как тип аргумента стёрся при компиляции, невозможно проверить, соответствуют ли содержимое списка запрошенному типу.
- возвращает
объект-получатель.
- Определяющие классы
- Any
- Исключения
ClassCastExceptionесли объект-получатель не является экземпляром стираемого типаT0.
def clone(): AnyRef
Создаёт копию объекта-получателя.
По умолчанию, реализация метода clone зависит от платформы.
- возвращает
копию объекта-получателя.
def collect[S](pf: PartialFunction[T, S])(implicit executor: ExecutionContext): Future[S]
Создаёт новый фьючерс, отображая значение текущего фьючерса, если заданная частичная функция определена для этого значения.
Если текущий фьючерс содержит значение, для которого определена частичная функция, то новый фьючерс также будет содержать это значение. В противном случае, результирующий фьючерс завершится с NoSuchElementException.
Если текущий фьючерс завершается ошибкой, то результирующий фьючерс также завершается ошибкой.
Пример:
val f = Future { -5 }
val g = f collect {
case x if x < 0 => -x
}
val h = f collect {
case x if x > 0 => x * 2
}
g foreach println // Eventually prints 5
Await.result(h, Duration.Zero) // throw a NoSuchElementException
- S
тип возвращаемого
Future- pf
PartialFunctionдля применения к результату успешного выполнения этогоFuture- возвращает
Future, содержащий результат примененияPartialFunction, илиNoSuchElementException
def ensuring(cond: (Future[T]) ⇒ Boolean, msg: ⇒ Any): Future[T]
- Неявный
- Этот член добавлен неявным преобразованием из Future[T] в Ensuring[Future[T]], выполненным методом Ensuring в scala.Predef.
- Классы определения
- Ensuring
def ensuring(cond: (Future[T]) ⇒ Boolean): Future[T]
- Неявный
- Этот член добавлен неявным преобразованием из Future[T] в Ensuring[Future[T]], выполненным методом Ensuring в scala.Predef.
- Классы определения
- Ensuring
def ensuring(cond: Boolean, msg: ⇒ Any): Future[T]
- Неявный
- Этот член добавлен неявным преобразованием из Future[T] в Ensuring[Future[T]], выполненным методом Ensuring в scala.Predef.
- Классы определения
- Ensuring
def ensuring(cond: Boolean): Future[T]
- Неявный
- Этот член добавлен неявным преобразованием из Future[T] в Ensuring[Future[T]], выполненным методом Ensuring в scala.Predef.
- Классы определения
- Ensuring
final def eq(arg0: AnyRef): Boolean
Проверяет, является ли аргумент (that) ссылкой на объект-приёмник (this).
Метод eq реализует отношение эквивалентности на не-нулевых экземплярах AnyRef, и имеет три дополнительных свойства:
-
Он согласован: для любых не-нулевых экземпляров
x и y типа AnyRef, многократные вызовы x.eq(y) последовательно возвращают true или последовательно возвращают false. Для любого не-нулевого экземпляра x типа AnyRef, x.eq(null) и null.eq(x) возвращают false.
null.eq(null) возвращает true.
При переопределении методов equals или hashCode важно обеспечить согласованность их поведения с равенством по ссылке. Поэтому, если два объекта являются ссылками друг на друга (o1 eq o2 ), они должны быть равны друг другу (o1 == o2) и они должны иметь одинаковое значение хэша (o1.hashCode == o2.hashCode).
- возвращает
trueесли аргумент является ссылкой на объект-приёмник;falseв противном случае.
- Классы определения
- AnyRef
def equals(arg0: Any): Boolean
Метод равенства для ссылочных типов. Реализация по умолчанию делегирует eq.
См. также equals в scala.Any.
- возвращает
trueесли объект-приёмник эквивалентен аргументу;falseв противном случае.
- Классы определения
- AnyRef → Any
def failed: Future[Throwable]
Возвращаемый Future будет успешно завершён с Throwable исходного Future, если исходный Future завершается ошибкой.
Если исходный Future успешно завершается, возвращаемый Future завершается ошибкой с NoSuchElementException.
Этот фьючерс может содержать объект throwable, что означает, что фьючерс завершился ошибкой. Фьючерсы, полученные через комбинаторы, имеют ту же исключительную ситуацию, что и фьючерс, из которого они были получены. Следующие объекты throwable не содержатся в фьючерсе:
Error - ошибки не содержатся в фьючерсах
InterruptedException - не содержатся в фьючерсахвсе scala.util.control.ControlThrowable за исключением NonLocalReturnControl - не содержатся в фьючерсах
Вместо этого фьючерс завершается с ExecutionException, причиной которого является одно из вышеперечисленных исключений. Если фьючерс завершается с scala.runtime.NonLocalReturnControl, он завершается со значением из этого объекта throwable вместо этого.
- возвращает
завершающийся ошибкой проекция этого
Future.
def fallbackTo[U >: T](that: Future[U]): Future[U]
Создаёт новый фьючер, который содержит результат этого фьючера, если он был успешно завершён, или, если нет, результат фьючера that , если that завершён успешно. Если оба фьючера завершились с ошибкой, результирующий фьючер содержит объект исключения первого фьючера.
Использование этого метода не приведёт к недетерминированному поведению конкурирующих программ.
Пример:
val f = Future { sys.error("failed") }
val g = Future { 5 }
val h = f fallbackTo g
h foreach println // Eventually prints 5
- U
тип другого
Futureи результирующегоFuture- that
фьючер, результат которого мы хотим использовать, если этот фьючер завершится с ошибкой.
- returns
фьючер с успешным результатом этого или that фьючера, или с ошибкой этого фьючера, если оба завершились с ошибкой
def filter(p: (T) ⇒ Boolean)(implicit executor: ExecutionContext): Future[T]
Создаёт новый фьючер, отфильтровав значение текущего фьючера с помощью предиката.
Если текущий фьючер содержит значение, которое удовлетворяет предикату, новый фьючер также будет содержать это значение. В противном случае результирующий фьючер завершится с ошибкой NoSuchElementException.
Если текущий фьючер завершается с ошибкой, то и результирующий фьючер завершается с ошибкой.
Пример:
val f = Future { 5 }
val g = f filter { _ % 2 == 1 }
val h = f filter { _ % 2 == 0 }
g foreach println // Eventually prints 5
Await.result(h, Duration.Zero) // throw a NoSuchElementException
- p
предикат, применяемый к успешному результату этого фьючера.
- returns
фьючер, который будет содержать успешный результат этого фьючера, если он удовлетворяет предикату, или завершится с ошибкой
NoSuchElementException
def finalize(): Unit
Вызывается сборщиком мусора для объекта-получателя, когда на объект больше нет ссылок.
Детали о том, когда и как вызывается метод finalize, а также взаимодействие между finalize и нелокальными возвратами и исключениями зависят от платформы.
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
- Note
не определён в SLS как член AnyRef
def flatMap[S](f: (T) ⇒ Future[S])(implicit executor: ExecutionContext): Future[S]
Создаёт новый фьючер, применяя функцию к успешному результату этого фьючера и возвращает результат функции в качестве нового фьючера. Если этот фьючер завершается с исключением, то новый фьючер также будет содержать это исключение.
Пример:
val f = Future { 5 }
val g = Future { 3 }
val h = for {
x: Int <- f // returns Future(5)
y: Int <- g // returns Future(3)
} yield x + y
переводится в:
f flatMap { (x: Int) => g map { (y: Int) => x + y } }
- S
тип возвращаемого
Future- f
функция, которая будет применена к успешному результату этого фьючера.
- returns
фьючер, который будет завершён результатом применения функции
def flatten[S](implicit ev: <:<[T, Future[S]]): Future[S]
Создаёт новый фьючер с одним уровнем вложенности, уплощённым, этот метод эквивалентен flatMap(identity).
- S
тип возвращаемого
Future
def foreach[U](f: (T) ⇒ U)(implicit executor: ExecutionContext): Unit
Асинхронно обрабатывает значение в фьючере, как только значение станет доступным.
ПРЕДУПРЕЖДЕНИЕ: Не будет вызван, если этот фьючер никогда не завершится или завершится с ошибкой.
Поскольку этот метод выполняется асинхронно и не возвращает значения, любые некритические исключения будут сообщены ExecutionContext.
- U
используется только для принятия любого типа возвращаемого значения заданной функции обратного вызова
- f
функция, которая будет выполнена, если этот фьючер завершится с результатом; возвращаемое значение
fбудет проигнорировано.
def formatted(fmtstr: String): String
Возвращает строку, отформатированную в соответствии с заданной строкой format. Строки формата аналогичны строкам формата String.format (@see java.lang.String.format).
- Implicit
- Этот член добавляется неявным преобразованием из Future[T] в StringFormat[Future[T]] в методе StringFormat в scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @inline()
final def getClass(): Class[_]
Возвращает представление класса объекта во время выполнения.
- returns
объект класса, соответствующий типу получателя во время выполнения.
def hashCode(): Int
Метод hashCode для ссылочных типов. См. hashCode в scala.Any.
- returns
значение хэш-кода для этого объекта.
final def isInstanceOf[T0]: Boolean
Проверяет, является ли динамический тип объекта-приёмника T0.
Обратите внимание, что результат проверки зависит от правил стирания типов в Scala. Следовательно, выражение 1.isInstanceOf[String] вернёт false, а выражение List(1).isInstanceOf[List[String]] вернёт true. В последнем примере из-за стирания параметра типа во время компиляции невозможно проверить, соответствуют ли элементы списка указанному типу.
- returns
trueесли объект-приёмник является экземпляром стёртого типаT0;falseв противном случае.
- Definition Classes
- Any
def map[S](f: (T) ⇒ S)(implicit executor: ExecutionContext): Future[S]
Создаёт новый фьючер, применяя функцию к результату успешного выполнения этого фьючера. Если этот фьючер завершается с исключением, то новый фьючер также содержит это исключение.
Пример:
val f = Future { "The future" }
val g = f map { x: String => x + " is now!" }
Обратите внимание, что выражение с использованием for comprehensions, включающее Future , может содержать вызовы map и/или flatMap и withFilter. См. scala.concurrent.Future#flatMap для примера такого выражения.
- S
тип возвращаемого
Future- f
функция, которая будет применена к результату успешного выполнения этого
Future- returns
фьючер, который завершится результатом применения функции
def mapTo[S](implicit tag: ClassTag[S]): Future[S]
Создаёт новый фьючер, который завершается результатом этого фьючера, если он соответствует стёртому типу S, или исключением в противном случае.
- S
тип возвращаемого
Future- tag
маркер типа, используемый для приведения результата этого фьючера
- returns
фьючер, содержащий приведенный результат этого фьючера или исключение в противном случае
final def ne(arg0: AnyRef): Boolean
Эквивалентно !(this eq that).
- returns
true, если аргумент не является ссылкой на объект-приёмник; false в противном случае.
- Definition Classes
- AnyRef
final def notify(): Unit
Разбуждает один поток, ожидающий монитора объекта-приёмника.
- Definition Classes
- AnyRef
- Annotations
- @native()
- Note
не определено в SLS как член AnyRef
final def notifyAll(): Unit
Разбуждает все потоки, ожидающие монитора объекта-приёмника.
- Definition Classes
- AnyRef
- Annotations
- @native()
- Note
не определено в SLS как член AnyRef
def recover[U >: T](pf: PartialFunction[Throwable, U])(implicit executor: ExecutionContext): Future[U]
Создаёт новый фьючер, который обрабатывает любые подходящие исключения, которые этот фьючер может содержать. Если совпадения нет или этот фьючер содержит допустимый результат, то новый фьючер будет содержать то же самое.
Пример:
Future (6 / 0) recover { case e: ArithmeticException => 0 } // result: 0
Future (6 / 0) recover { case e: NotFoundException => 0 } // result: exception
Future (6 / 2) recover { case e: ArithmeticException => 0 } // result: 3
- U
тип возвращаемого
Future- pf
функция, которая применяется, если этот фьючер завершается неудачей
- returns
фьючер с успешным значением этого фьючера или результатом применения функции
def recoverWith[U >: T](pf: PartialFunction[Throwable, Future[U]])(implicit executor: ExecutionContext): Future[U]
Создаёт новый фьючер, который обрабатывает любое соответствующее исключение, которое может содержать этот фьючер, присваивая ему значение другого фьючера.
Если совпадения нет или этот фьючер содержит допустимый результат, то новый фьючер будет содержать тот же результат.
Пример:
val f = Future { Int.MaxValue }
Future (6 / 0) recoverWith { case e: ArithmeticException => f } // result: Int.MaxValue
- U
тип возвращаемого
Future- pf
функция, применяемая, если этот фьючер завершается неудачей
- returns
фьючер с успешным значением этого фьючера или результатом фьючера, возвращённого функцией
final def synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
def toString(): String
Создаёт строковое представление этого объекта. По умолчанию представление зависит от платформы. На платформе Java оно представляет собой конкатенацию имени класса, символа "@" и хэш-кода объекта в шестнадцатеричном формате.
- returns
строковое представление объекта.
- Definition Classes
- AnyRef → Any
def transform[S](s: (T) ⇒ S, f: (Throwable) ⇒ Throwable)(implicit executor: ExecutionContext): Future[S]
Создаёт новый фьючер, применяя функцию 's' к успешному результату этого фьючера или функцию 'f' к результату с ошибкой. Если при применении 's' или 'f' возникает какое-либо некритическое исключение, это исключение будет передано в результирующий фьючер.
- S
тип возвращаемого значения
- s
функция, преобразующая успешный результат получателя в успешный результат возвращаемого фьючера
- f
функция, преобразующая ошибку получателя в ошибку возвращаемого фьючера
- returns
фьючер, который будет завершён преобразованным значением
final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
final def wait(arg0: Long): Unit
final def withFilter(p: (T) ⇒ Boolean)(implicit executor: ExecutionContext): Future[T]
def zip[U](that: Future[U]): Future[(T, U)]
Объединяет значения фьючера this и фьючера that, создавая новый фьючер, содержащий кортеж их результатов.
Если фьючер this завершается с ошибкой, результирующий фьючер завершается с ошибкой, содержащей исключение this. В противном случае, если фьючер that завершается с ошибкой, результирующий фьючер завершается с ошибкой, содержащей исключение that.
- U
тип другого фьючера
- that
другой фьючер
- returns
фьючер с результатами обоих фьючеров или ошибкой первого из них, который завершился с ошибкой
def zipWith[U, R](that: Future[U])(f: (T, U) ⇒ R)(implicit executor: ExecutionContext): Future[R]
Объединяет значения фьючера this и фьючера that с помощью функции f, создавая новый фьючер, содержащий результат.
Если фьючер this завершается с ошибкой, результирующий фьючер завершается с ошибкой, содержащей исключение this. В противном случае, если фьючер that завершается с ошибкой, результирующий фьючер завершается с ошибкой, содержащей исключение that. Если применение f вызывает исключение, результирующий фьючер завершается с этим исключением, если оно не является фатальным.
- U
тип другого фьючера
- R
тип результирующего фьючера
- that
другой фьючер
- f
функция для применения к результатам
thisиthat- returns
фьючер с результатом применения
fк результатамthisиthat
def →[B](y: B): (Future[T], B)
- Неявный
- Этот член добавлен неявным преобразованием из Future[T] в ArrowAssoc[Future[T]], выполненным методом ArrowAssoc в scala.Predef.
- Definition Classes
- ArrowAssoc
© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.12.9/scala/concurrent/Future.html
A
Futureпредставляет собой значение, которое может или не может *в данный момент* быть доступно, но будет доступно в какой-то момент, или исключение, если это значение не могло быть сделано доступным.Асинхронные вычисления, которые генерируют future, создаются с помощью вызова
Future.applyи вычисляются с использованием предоставленногоExecutionContext, который может быть основан на пуле потоков.import ExecutionContext.Implicits.global val s = "Hello" val f: Future[String] = Future { s + " future!" } f foreach { msg => println(msg) }Futures и Promises