Horis пре 1 година
родитељ
комит
d812a5885c
1 измењених фајлова са 7 додато и 8 уклоњено
  1. 7 8
      app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt

+ 7 - 8
app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt

@@ -2,7 +2,6 @@ package io.legado.app.help.coroutine
 
 import io.legado.app.utils.printOnDebug
 import kotlinx.coroutines.CancellationException
-import kotlinx.coroutines.CompletableDeferred
 import kotlinx.coroutines.CompletionHandler
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.CoroutineStart
@@ -26,7 +25,7 @@ import kotlin.coroutines.CoroutineContext
 class Coroutine<T>(
     val scope: CoroutineScope,
     context: CoroutineContext = Dispatchers.IO,
-    startOption: CoroutineStart = CoroutineStart.DEFAULT,
+    val startOption: CoroutineStart = CoroutineStart.DEFAULT,
     val executeContext: CoroutineContext = Dispatchers.Main,
     block: suspend CoroutineScope.() -> T
 ) {
@@ -58,9 +57,6 @@ class Coroutine<T>(
     private var timeMillis: Long? = null
     private var errorReturn: Result<T>? = null
 
-    private val lazyWaiter =
-        if (startOption === CoroutineStart.LAZY) CompletableDeferred<Unit>() else null
-
     val isCancelled: Boolean
         get() = job.isCancelled
 
@@ -160,16 +156,19 @@ class Coroutine<T>(
     }
 
     fun start() {
-        lazyWaiter?.complete(Unit)
+        if (startOption === CoroutineStart.LAZY && isCancelled) {
+            cancel()
+        } else {
+            job.start()
+        }
     }
 
     private fun executeInternal(
         context: CoroutineContext,
         block: suspend CoroutineScope.() -> T
     ): Job {
-        return (scope.plus(executeContext)).launch(start = CoroutineStart.ATOMIC) {
+        return (scope.plus(executeContext)).launch(start = startOption) {
             try {
-                lazyWaiter?.await()
                 start?.let { dispatchVoidCallback(this, it) }
                 ensureActive()
                 val value = executeBlock(this, context, timeMillis ?: 0L, block)