Остановится ли поток в этом вычислении обещания - PullRequest
0 голосов
/ 11 октября 2019

Я хочу подтвердить свое понимание обещания в Scala. Учитывая приведенный ниже код:

    val promise = Promise[Option[Boolean]]

    foo().value.onComplete {
      case Failure(exception) => promise.success(None)
      case Success(value) =>
        value match {
          case Left(a)  => promise.success(None)
          case Right(b) => promise.success(Some(b))
        }
    }
    promise.future

Будет ли остановлен поток, выполняющий этот оператор, до тех пор, пока не завершится foo, или он сразу же продолжит выполнение и не будет ожидать обратного вызова?

1 Ответ

1 голос
/ 11 октября 2019

Future#onComplete регистрирует обработчик, который будет запущен после завершения Future.

Он не ожидает этого завершения.

Если Future уже завершен, обработчик будетзапускаться немедленно или по расписанию асинхронно, в зависимости от неявного ExecutionContext.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...