簡體   English   中英

將 Java Future 轉換為 Twitter Future 的最佳方式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM