runOnFailure

inline suspend fun runOnFailure(crossinline onFailure: (Throwable) -> Unit, crossinline block: suspend () -> Unit)

Executes block and invokes onFailure if it throws. Rethrows CancellationException after calling onFailure so structured concurrency is preserved.