Integration with Guava ListenableFuture.
Coroutine builders:
Name Result Scope Description future ListenableFuture CoroutineScope Returns a single value with the future resultExtension functions:
Name Description com.google.common.util.concurrent.ListenableFuture.await Awaits for completion of the future (cancellable) kotlinx.coroutines.Deferred.asListenableFuture Converts a deferred value to the future ExampleGiven the following functions defined in some Java API based on Guava:
public ListenableFuture<Image> loadImageAsync(String name); // starts async image loading
public Image combineImages(Image image1, Image image2); // synchronously combines two images using some algorithm
We can consume this API from Kotlin coroutine to load two images and combine then asynchronously. The resulting function returns ListenableFuture<Image>
for ease of use back from Guava-based Java code.
fun combineImagesAsync(name1: String, name2: String): ListenableFuture<Image> = future {
val future1 = loadImageAsync(name1) // start loading first image
val future2 = loadImageAsync(name2) // start loading second image
combineImages(future1.await(), future2.await()) // wait for both, combine, and return result
}
Note that this module should be used only for integration with existing Java APIs based on ListenableFuture
. Writing pure-Kotlin code that uses ListenableFuture
is highly not recommended, since the resulting APIs based on the futures are quite error-prone. See the discussion on Asynchronous Programming Styles for details on general problems pertaining to any future-based API and keep in mind that ListenableFuture
exposes a blocking method get that makes it especially bad choice for coroutine-based Kotlin code.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4