Spec-Zone.ru › Scala 2.13 Library

Трейт scala.concurrent.Future

Компаньон объект Future

Трейт Future[+T] extends Awaitable[T]

A Future представляет значение, которое может или не может *в настоящий момент* быть доступно, но будет доступно в какой-то момент, или исключение, если это значение не может быть сделано доступным.

Асинхронные вычисления, которые возвращают фьючеры, создаются с помощью вызова Future.apply и вычисляются с использованием предоставленного ExecutionContext, который может быть основан на пуле потоков.

import ExecutionContext.Implicits.global
val s = "Hello"
val f: Future[String] = Future {
  s + " future!"
}
f foreach {
  msg => println(msg)
}
Источник
Future.scala
См. также

Фьючеры и промисы

Линейные супертипы
Awaitable[T], AnyRef, Any
Известные подклассы
never

Абстрактные члены-значения

абстрактный def isCompleted: Boolean

Возвращает, завершился ли фьючер значением или исключением.

Примечание: использование этого метода приводит к недетерминированным программам с потоком данных.

возвращает

true если фьючер завершен, false в противном случае

абстрактный def onComplete[U](f: (Try[T]) => U)(неявный executor: ExecutionContext): Unit

При завершении этого фьючера, либо исключением, либо значением, примените предоставленную функцию.

Если фьючер уже завершен, это будет применено либо немедленно, либо асинхронно.

Обратите внимание, что возвращаемое значение f будет проигнорировано.

Поскольку этот метод выполняется асинхронно и не возвращает значение, любые некритические исключения будут сообщены ExecutionContext.

Может быть зарегистрировано несколько обратных вызовов; нет гарантии, что они будут выполнены в определенном порядке.

Предоставленный обратный вызов всегда выполняется в предоставленном неявном ExecutionContext, хотя нет гарантии, что метод execute() на ExecutionContext будет вызываться один раз на каждый обратный вызов или что execute() будет вызываться в текущем потоке. То есть реализация может запускать несколько обратных вызовов в пакете в рамках одного execute() и может запускать execute() немедленно или асинхронно. Завершение фьючера должно *произойти до* вызова обратного вызова.

U

используется только для принятия любого типа возвращаемого значения заданной функции обратного вызова

f

функция, которая должна быть выполнена при завершении этого Future

абстрактный def ready(atMost: Duration)(неявный permit: CanAwait): Future.this.type

Ожидайте состояния "completed" этого Awaitable.

Этот метод не следует вызывать напрямую; используйте Await.ready вместо этого.

atMost

максимальное время ожидания, которое может быть отрицательным (ожидание не выполняется), Duration.Inf для неограниченного ожидания или конечное положительное время

returns

этот Awaitable

Definition Classes
Awaitable
Annotations
@throws(classOf[TimeoutException]) @throws(classOf[InterruptedException])
Exceptions thrown

IllegalArgumentException если atMost равно Duration.Undefined

InterruptedException если текущий поток прерывается во время ожидания

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(classOf[Exception])
Exceptions thrown

IllegalArgumentException если atMost равно Duration.Undefined

InterruptedException если текущий поток прерывается во время ожидания

TimeoutException если после ожидания указанного времени этот Awaitable по-прежнему не готов

abstract def transform[S](f: (Try[T]) => Try[S])(implicit executor: ExecutionContext): Future[S]

Создаёт новый Future, применяя указанную функцию к результату этого Future. Если при применении 'f' возникло какое-либо некритическое исключение, то это исключение будет передано в результирующее future.

S

тип возвращаемого Future

f

функция, преобразующая результат этого future

returns

a Future который будет завершен преобразованным значением

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 если был.

Члены-значения конкретных типов

final def !=(arg0: Any): Boolean

Тестирование двух объектов на неравенство.

returns

true если !(this == that), в противном случае false.

Definition Classes
AnyRef → Any

final def ##(): Int

Эквивалентно x.hashCode за исключением упакованных числовых типов и null. Для чисел возвращает значение хеша, согласованное с равенством значений: если две экземпляра типа значения сравниваются как true, тогда ## вернет одинаковое значение хеша для каждого из них. Для null возвращает хешкод, где null.hashCode вызывает NullPointerException.

returns

значение хеша, согласованное с ==

Definition Classes
AnyRef → Any

def +(other: String): String

Неявный
Этот член добавлен с помощью неявного преобразования из Future[T] вany2stringadd[Future[T]], выполненного методом any2stringadd в scala.Predef.
Definition Classes
any2stringadd

def ->[B](y: B): (Future[T], B)

Неявный
Этот член добавлен с помощью неявного преобразования из Future[T] вArrowAssoc[Future[T]], выполненного методом ArrowAssoc в scala.Predef.
Definition Classes
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 => throw new RuntimeException("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 зависит от платформы.

возвращает

копию объекта-получателя.

Атрибуты
protected[java.lang]
Классы определения
AnyRef
Аннотации
@throws(classOf[java.lang.CloneNotSupportedException]) @native()
Примечание

не указан в SLS как член AnyRef

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

частичная функция, применяемая к успешному результату этого Future

returns

фьючер, содержащий результат применения частичной функции или фьючер с ошибкой NoSuchElementException

def ensuring(cond: (Future[T]) => Boolean, msg: => Any): Future[T]

Implicit
Этот член добавляется неявным преобразованием из Future[T] вEnsuring[Future[T]] с помощью метода Ensuring в scala.Predef.
Definition Classes
Ensuring

def ensuring(cond: (Future[T]) => Boolean): Future[T]

Implicit
Этот член добавляется неявным преобразованием из Future[T] вEnsuring[Future[T]] с помощью метода Ensuring в scala.Predef.
Definition Classes
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 реализует отношение эквивалентности на не-null экземплярах AnyRef, и обладает тремя дополнительными свойствами:

    Он согласован: для любых не-null экземпляров x и y типа AnyRef, многократные вызовы x.eq(y) последовательно возвращают true или последовательно возвращают false. Для любого не-null экземпляра x типа AnyRef, x.eq(null) и null.eq(x) возвращают false. null.eq(null) возвращает true.

При переопределении методов equals или hashCode важно обеспечить, что их поведение согласуется с равенством ссылок. Поэтому, если два объекта являются ссылками друг на друга (o1 eq o2), они должны быть равны друг другу (o1 == o2) и должны иметь одинаковый хэш-код (o1.hashCode == o2.hashCode).

returns

true если аргумент является ссылкой на объект-получатель; false в противном случае.

Определяющие классы
AnyRef

def equals(arg0: AnyRef): Boolean

Метод равенства для ссылочных типов. По умолчанию делегирует вызов методу eq.

См. также equals в scala.Any.

returns

true если объект-получатель эквивалентен аргументу; false в противном случае.

Определяющие классы
AnyRef → Any

def failed: Future[Throwable]

Возвращаемое значение Future будет успешно завершено с результатом Throwable исходного Future в случае, если исходное Future завершится неудачно.

Если исходное Future завершится успешно, возвращаемое Future завершится с ошибкой NoSuchElementException.

Этот объект может содержать исключение, что означает, что задача завершилась неудачно. Задачи, полученные с помощью комбинаторов, имеют то же исключение, что и исходная задача. Следующие типы исключений не содержатся в задаче:

    Error - критические ошибки не содержатся в задачах InterruptedException - не содержатся в задачахвсе scala.util.control.ControlThrowable за исключением NonLocalReturnControl - не содержатся в задачах

Вместо этого, задача завершается с ExecutionException, с одним из вышеперечисленных исключений в качестве причины. Если задача завершается с scala.runtime.NonLocalReturnControl, она завершается со значением, взятым из этого исключения.

returns

неудачное проектирование этого Future.

def fallbackTo[U >: T](that: Future[U]): Future[U]

Создает новую задачу, содержащую результат этой задачи, если она была выполнена успешно, или, если нет, результат задачи that, если that успешно выполнена. Если обе задачи завершились неудачно, результирующая задача содержит исключение первой задачи.

Использование этого метода не приведет к недетерминированному поведению конкуретных программ.

Пример:

val f = Future { throw new RuntimeException("failed") }
val g = Future { 5 }
val h = f fallbackTo g
h foreach println // Eventually prints 5
U

тип другой Future и результирующей Future

that

задача, результат которой мы хотим использовать, если эта Future завершается неудачно.

returns

задача с успешным результатом этой или задачи Future, или с ошибкой этой Future, если обе завершаются неудачно

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

предикат, который применяется к успешному результату этой Future

returns

задача, которая будет содержать успешный результат этой Future если он соответствует предикату или NoSuchElementException

def finalize(): Unit

Вызывается сборщиком мусора для объекта-получателя, когда больше нет ссылок на объект.

Подробности о том, когда и как вызывается метод finalize, а также взаимодействие между finalize и возвратами и исключениями за пределами локальной области, зависят от платформы.

Атрибуты
protected[java.lang]
Определяющие классы
AnyRef
Аннотации
@throws(classOf[java.lang.Throwable])
Примечание

не указано в 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

функция, которая будет применена к результату успешного выполнения этого фьючера

возвращает

фьючер, который будет завершен результатом применения функции

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 (@см. java.lang.String.format).

Неявный
Этот член добавлен неявным преобразованием из Future[T] вStringFormat[Future[T]] с помощью метода StringFormat в scala.Predef.
Определяющие классы
StringFormat
Аннотации
@inline()

final def getClass(): Class[_ <: AnyRef]

Возвращает представление класса объекта во время выполнения.

возвращает

объект класса, соответствующий типу получателя во время выполнения.

Определяющие классы
AnyRef → Any
Аннотации
@native()

def hashCode(): Int

Метод hashCode для ссылочных типов. См. hashCode в scala.Any.

возвращает

значение хеш-кода для этого объекта.

Определяющие классы
AnyRef → Any
Аннотации
@native()

final def isInstanceOf[T0]: Boolean

Проверяет, является ли динамический тип объекта-получателя T0.

Обратите внимание, что результат проверки выполняется с учётом стирания типов в Scala. Поэтому выражение 1.isInstanceOf[String] вернёт false, а выражение List(1).isInstanceOf[List[String]] вернёт true. В последнем примере, поскольку аргумент типа стирается при компиляции, проверить, соответствуют ли содержимое списка указанному типу, невозможно.

возвращает

true, если объект-получатель является экземпляром стирания типа T0; false в противном случае.

Определяющие классы
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!" }

Обратите внимание, что для понимания, включающего Future, может потребоваться вызов map и/или flatMap и withFilter. См. scala.concurrent.Future#flatMap для примера такого понимания.

S

тип возвращаемого Future

f

функция, которая будет применена к успешному результату этого Future

returns

фьючер, который будет завершён результатом применения функции

def mapTo[S](implicit tag: ClassTag[S]): Future[S]

Создаёт новый фьючер, который завершается результатом этого фьючера, если он соответствует стёртому типу S, или ClassCastException в противном случае.

S

тип возвращаемого Future

tag

ClassTag, которая будет использована для приведения результата этого Future

returns

фьючер, содержащий приведённый результат этого Future или ClassCastException в противном случае

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

функция PartialFunction, которая применяется, если этот Future завершится ошибкой

returns

фьючер с успешным значением этого Future или результатом PartialFunction

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

функция PartialFunction, которая применяется, если этот Future завершится ошибкой

returns

фьючер с успешным значением этого Future или результатом Future возвращаемого PartialFunction

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

тип возвращаемого Future

s

функция, преобразующая успешный результат получателя в успешный результат возвращаемого фьючера

f

функция, преобразующая ошибку получателя в ошибку возвращаемого фьючера

returns

фьючер, который будет завершён с преобразованным значением

final def wait(): Unit

Definition Classes
AnyRef
Annotations
@throws(classOf[java.lang.InterruptedException])

final def wait(arg0: Long, arg1: Int): Unit

Definition Classes
AnyRef
Annotations
@throws(classOf[java.lang.InterruptedException])

final def wait(arg0: Long): Unit

Definition Classes
AnyRef
Annotations
@throws(classOf[java.lang.InterruptedException]) @native()

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

тип другого Future

that

другой Future

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

тип другого Future

R

тип результирующего Future

that

другой Future

f

функция, применяемая к результатам this и that

returns

фьючерс с результатом применения f к результатам this и that

© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.13.0/scala/concurrent/Future.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API