Add `suspendRunCatching` to safely handle exceptions without a coroutine
Handling any `CancellationException` by mistake inside a Coroutine may break structured concurrency, `suspendRunCatching` provides a easy way to handle exceptions without interfering in structured concurrency.
For example:
```kotlin
suspend fun example(context: Context) {
val info = suspendRunCatching { context.getSystemService<SystemUpdateManager>()!!.retrieveSystemUpdateInfo() }
.getOrNull() ?: return // a null return is expected, system update info may not be available.
// Do something with the info, like trigger an update.
}
```
Test: atest SystemUITests:CoroutineResultTest
Fixes: b/267486825
Change-Id: I5a98913d26ea2a9e447a16f9da494ae18c4f92f1
2 files changed