[英]Best way to convert a Java Future to a Twitter Future
在我的應用程序中,我將 java.concurrent.future 轉換為 Twitter Future,如下所示:
val myTwitterFuture = FuturePool.unboundedPool{ myJavaFuture.get}
這是這樣做的正確方法,還是有首選方法?
如果你的 Java 未來只是一個java.util.concurrent.Future
,那么你所擁有的基本上是你能做的最好的,因為它是一個非常糟糕的類型。 如果您有java.util.concurrent.CompletableFuture
,您基本上可以結合答案將其轉換為scala.concurrent.Future
並將 Scala 未來轉換為 Twitter 未來:
import java.util.concurrent.{Future => JFuture, CompletableFuture}
import com.twitter.util.{Future => TwitterFuture, Promise => TwitterPromise}
import scala.util.{Success, Failure}
implicit class FutureWrapper[A](private val jf: JFuture[A]) extends AnyVal {
def asTwitter: TwitterFuture[A] = jf match {
case jf: CompletableFuture[A] =>
val promise = new TwitterPromise[A]()
jf.whenComplete { (result, exception) =>
if (exception != null)
promise.setException(exception)
else
promise.setValue(result)
}
promise
case _ =>
FuturePool.unboundedPool{ jf.get }
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.