Tolriq
11/30/2018, 8:07 PMsuspend fun doLoad() = suspendCancellableCoroutine<Result> {
val cancellationSignal = CancellationSignal()
it.invokeOnCancellation { cancellationSignal.cancel() }
val result = query.cancellationSignal(cancellationSignal).executeAsync()
if (cancellationSignal.isCanceled) {
it.resume(Result.Cancelled)
} else {
it.resume(Result.Success(result))
}
}
In that example all works if executeAsync is blocking, but if executeAsync is a suspend function this no more works. Since cancellation rely on the cancellation signal how to merge the 2 worlds?Daniel Tam
12/01/2018, 6:12 AMTolriq
12/01/2018, 8:50 AMDaniel Tam
12/01/2018, 2:02 PMTolriq
12/01/2018, 2:17 PM