Future 回调方法和 Promises [成功与失败] 的区别?
Difference between Future callback methods and Promises [Success and Failure]?
我正在 Scala Concurrency
使用 Future
和 Promises
。
我没明白,使用 Callback
方法完成 Future 和使用 Promises 之间的确切区别是什么?
是不是说Future的Callback方法实际上并没有完成Future?只有使用Promise才能完成Future?
另外,我看到很多地方,你可以从 Futures 和 Promises 中读取,但你只能写入 Promises。
你实际上并没有完成 Future
,你只是在完成时将回调传递给触发器。您可以使用 Promise
来控制何时触发回调。来自 scala 官方文档的示例:
val p = Promise[T]()
val f = p.future
val producer = Future {
val r = produceSomething()
p success r
continueDoingSomethingUnrelated()
}
顺便说一下 Future
在后台使用 Promises
。
Future 仅在异步计算结束时完成:
val f: Future[List[Int]] = Future {
makeSomeNumbers() //when this finishes, the Future is completed.
}
f onSuccess {
case foo => println("I was completed when makeSomeNumbers finished")
}
而 Promises 可以产生可以手动完成的未来。
val p = Promise[String]()
val f = p.future
p success('hi') //when success is called, the Future is completed.
f onSuccess {
case foo => println("I was completed because a Promise told me to do so")
}
传递给 onSuccess
的回调不会完成 Future,它只会在 Future 完成并执行某些操作时进行监听。对于 Promises,您可以调用其 success
方法来完成其关联的 Future。
你不能complete
一个Future
。
A Future
应该是一个计算,这个计算(一旦开始)在它完成时完成。创建后您无法控制它。您可以为其分配 onComplete
回调,它将在未来完成时触发,但您无法控制它何时触发。
如果你想要一个 Future
的完成度你可以控制,你可以 Promise
那个 Future
就像一个政客。现在,你完成那个未来是成功还是失败取决于你。
// lets promise an Int
val promise = Promise[Int]()
// Now... we also have a future associated with this promise
val future = promise.Future
// assign a callback which will be called when future completes
future.onComplete(
case Success(i) => println("Future complete :: " + i)
case Failure(ex) => println("Future failed :: " + ex.toString)
)
// Future by itself provides you no way to complete it
// if you want to complete this future, you can fulfil your promise
promise.complete(Try(10))
我正在 Scala Concurrency
使用 Future
和 Promises
。
我没明白,使用 Callback
方法完成 Future 和使用 Promises 之间的确切区别是什么?
是不是说Future的Callback方法实际上并没有完成Future?只有使用Promise才能完成Future?
另外,我看到很多地方,你可以从 Futures 和 Promises 中读取,但你只能写入 Promises。
你实际上并没有完成 Future
,你只是在完成时将回调传递给触发器。您可以使用 Promise
来控制何时触发回调。来自 scala 官方文档的示例:
val p = Promise[T]()
val f = p.future
val producer = Future {
val r = produceSomething()
p success r
continueDoingSomethingUnrelated()
}
顺便说一下 Future
在后台使用 Promises
。
Future 仅在异步计算结束时完成:
val f: Future[List[Int]] = Future {
makeSomeNumbers() //when this finishes, the Future is completed.
}
f onSuccess {
case foo => println("I was completed when makeSomeNumbers finished")
}
而 Promises 可以产生可以手动完成的未来。
val p = Promise[String]()
val f = p.future
p success('hi') //when success is called, the Future is completed.
f onSuccess {
case foo => println("I was completed because a Promise told me to do so")
}
传递给 onSuccess
的回调不会完成 Future,它只会在 Future 完成并执行某些操作时进行监听。对于 Promises,您可以调用其 success
方法来完成其关联的 Future。
你不能complete
一个Future
。
A Future
应该是一个计算,这个计算(一旦开始)在它完成时完成。创建后您无法控制它。您可以为其分配 onComplete
回调,它将在未来完成时触发,但您无法控制它何时触发。
如果你想要一个 Future
的完成度你可以控制,你可以 Promise
那个 Future
就像一个政客。现在,你完成那个未来是成功还是失败取决于你。
// lets promise an Int
val promise = Promise[Int]()
// Now... we also have a future associated with this promise
val future = promise.Future
// assign a callback which will be called when future completes
future.onComplete(
case Success(i) => println("Future complete :: " + i)
case Failure(ex) => println("Future failed :: " + ex.toString)
)
// Future by itself provides you no way to complete it
// if you want to complete this future, you can fulfil your promise
promise.complete(Try(10))