Integration with Google Play Services Tasks API.
Extension functions:
| Name | Description |
|---|---|
| Task.asDeferred | Converts a Task into a Deferred |
| Task.await | Awaits for completion of the Task (cancellable) |
| Deferred.asTask | Converts a deferred value to a Task |
Using Firebase APIs becomes simple:
FirebaseAuth.getInstance().signInAnonymously().await() val snapshot = try { FirebaseFirestore.getInstance().document("users/$id").get().await() // Cancellable await } catch (e: FirebaseFirestoreException) { // Handle exception return@async } // Do stuff
If the Task supports cancellation via passing a CancellationToken, pass the corresponding CancellationTokenSource to asDeferred or await to support bi-directional cancellation:
val cancellationTokenSource = CancellationTokenSource() val currentLocationTask = fusedLocationProviderClient.getCurrentLocation(PRIORITY_HIGH_ACCURACY, cancellationTokenSource.token) val currentLocation = currentLocationTask.await(cancellationTokenSource) // cancelling `await` also cancels `currentLocationTask`, and vice versa