launch Catching
fun CoroutineScope.launchCatching(context: CoroutineContext = EmptyCoroutineContext, start: CoroutineStart = CoroutineStart.DEFAULT, onError: CoroutineContext.(Throwable) -> Unit, block: suspend CoroutineScope.() -> Unit): Job
Launch a new coroutine using this scope and context, but catch any Throwables using onError and execute block. The coroutines launched inside block's scope will NOT cancel the scope.