Трейт scala.concurrent.Future
Компаньон объект Future
Трейт Future[+T] extends Awaitable[T]
Абстрактные члены-значения
абстрактный 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.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(classOf[Exception])
- Exceptions thrown
-
IllegalArgumentExceptionеслиatMostравно Duration.UndefinedInterruptedExceptionесли текущий поток прерывается во время ожидания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 зависит от платформы.
- возвращает
копию объекта-получателя.
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 и возвратами и исключениями за пределами локальной области, зависят от платформы.
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]
Возвращает представление класса объекта во время выполнения.
- возвращает
объект класса, соответствующий типу получателя во время выполнения.
def hashCode(): Int
Метод hashCode для ссылочных типов. См. hashCode в scala.Any.
- возвращает
значение хеш-кода для этого объекта.
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
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
A
Futureпредставляет значение, которое может или не может *в настоящий момент* быть доступно, но будет доступно в какой-то момент, или исключение, если это значение не может быть сделано доступным.Асинхронные вычисления, которые возвращают фьючеры, создаются с помощью вызова
Future.applyи вычисляются с использованием предоставленногоExecutionContext, который может быть основан на пуле потоков.import ExecutionContext.Implicits.global val s = "Hello" val f: Future[String] = Future { s + " future!" } f foreach { msg => println(msg) }Фьючеры и промисы