Was ist der beste Weg, um wrap-Blockierung Versuch[T] in der Zukunft[T] in Scala?

Hier ist das problem, ich habe eine Bibliothek, die eine blockierende Methode, die return-Versuch[T]. Aber da es eine Sperrung ein, ich möchte es nicht blockierende mit Zukunft[T]. In die Zukunft blockieren, ich möchte auch, um zu berechnen, etwas, das hängt von der Herkunft blockierende Methode auf den Rückgabewert.

Aber wenn ich so etwas wie unten, dann meine nonBlocking zurück Zukunft[Try[T]], die weniger überzeugen, da die Zukunft[T] darstellen könnte Scheitern[U] schon, würde ich eher bevorzugen, propagieren die Ausnahme von Zukunft[T] self.

def blockMethod(x: Int): Try[Int] = Try { 
  //Some long operation to get an Int from network or IO
  throw new Exception("Network Exception") }
}

def nonBlocking(x: Int): Future[Try[Int]] = future {
  blockMethod(x).map(_ * 2)
}

Hier ist, was ich versucht habe, benutze ich nur .get Methode in future {} block, aber ich bin mir nicht sicher, ob dies der beste Weg, das zu tun.

def blockMethod(x: Int): Try[Int] = Try { 
  //Some long operation to get an Int from network or IO
  throw new Exception("Network Exception") }
}

def nonBlocking(x: Int): Future[Int] = future {
  blockMethod(x).get * 2
}

Ist diese richtige Weise, das zu tun? Oder gibt es eine scala idiomatischer Weg, um zu konvertieren t Try[T], um die Zukunft[T]?

InformationsquelleAutor Brian Hsu | 2014-04-18
Schreibe einen Kommentar