diff --git a/app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt b/app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt index 01612b877..36a21428c 100644 --- a/app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt +++ b/app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt @@ -40,6 +40,8 @@ class Coroutine( private var timeMillis: Long? = null private var errorReturn: Result? = null + private var isCancelCalled = false + val isCancelled: Boolean get() = job.isCancelled @@ -115,6 +117,7 @@ class Coroutine( //取消当前任务 fun cancel(cause: CancellationException? = null) { + isCancelCalled = true job.cancel(cause) cancel?.let { MainScope().launch { @@ -146,8 +149,8 @@ class Coroutine( success?.let { dispatchCallback(this, value, it) } } catch (e: Throwable) { e.printOnDebug() + if (e is CancellationException && !isCancelCalled) this@Coroutine.cancel() if (e is CancellationException && e !is TimeoutCancellationException) { - this@Coroutine.cancel() return@launch } val consume: Boolean = errorReturn?.value?.let { value ->