gpt4 book ai didi

kotlin - CancellationException何时会发生?

转载 作者:行者123 更新时间:2023-12-02 13:25:38 27 4
gpt4 key购买 nike

我一直在阅读有关使用协程处理异常的信息,但是我还不清楚一些事情。

  • 什么时候会出现CancellationException?我是否必须将协程分配给作业,然后调用job.cancel()使其发生?
  • 查看我的代码,它会被捕获吗?还是第一个捕获块没有用?
  •     fun invoke(params: Params, onResult: (UseCaseResponse<Type>)?) {
    CoroutineScope(Dispatchers.Main).launch {
    try {
    val result = run(params)
    onResult?.onSuccess(result)
    Log.d(TAG, "Response: $result")
    } catch (e: CancellationException) {
    Log.d(TAG, "Error: $e")
    onResult?.onError(apiErrorHandler.traceErrorException(e))
    } catch (e: Exception) {
    Log.d(TAG, "Error: $e cause: ${e.cause}")
    onResult?.onError(apiErrorHandler.traceErrorException(e))
    }
    }
    }

    最佳答案

    这听起来像是一个愚蠢的答案,但是当有人扔出它时,就会发生CancellationException
    基本上,是的,当协程(或其父协程)被取消(是,通过job.cancel())时,应该引发此异常。但是,由工程师负责,编写挂起函数以检查其是否已取消并是否按规定行事(例如,像CancellationException中的所有挂起函数一样,将kotlinx.coroutines抛出)。因此,您的代码是否捕获CancellationException取决于run(params)内部发生的情况。
    有关更多信息和代码示例,请参见Cancellation is cooperativeMaking computation code cancellable

    关于kotlin - CancellationException何时会发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64261866/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com