为什么我的 kotlin 挂起函数不抛出错误?并继续下一行?

Why my kotlin suspend function don't throw error? And continue to nextline?

这是我的 viewModel 中调用该函数的代码。

viewModelScope.launch {
        resource.postValue(Resource.loading(true))
        try {
            localRepository.insertFile(fileEntity)
///This lines throw exeption
            messageRepository.sendMessageWithMediaAudio(message, mediaUri,        duration)
///But still continue to this line and don't catch the error
            resource.postValue(Resource.success(true))
        } catch (exception: Exception) {
            Timber.e(exception)
            resource.postValue(
                Resource.error(exception, exception.message!!)
            )
        }
    }

我想捕获错误,但它不会去捕获。

这是暂停功能

  suspend fun sendMessageWithMediaAudio(message: Message, uri: Uri, duration: Long) =
    withContext(ioDispatcher) {
        applicationScope.launch{Body}.join()
 }

是因为这一行:

applicationScope.launch { 
    Body 
}

您正在不同协程范围内启动新协程。 sendMessageWithMediaAudio returns 在 Body 完成之前。如果你想等到 sendMessageWithMediaAudio 完成(这可能是你想要查看对 .join() 的调用),请不要使用 applicationScope,只需在提供的范围内启动新协程通过 withContext.

此外,启动一个新协程并立即等待它完成 (.join()) 没有任何用处。您可以简单地将 Body 直接放在 withContext.

suspend fun sendMessageWithMediaAudio(message: Message, uri: Uri, duration: Long) {
    withContext(ioDispatcher) {
        Body
    }
}