【发布时间】:2021-06-04 19:03:59
【问题描述】:
我有一个 CoroutineWorker 需要在用户与我的应用交互时启动和停止,所以我使用 awaitCancelation() 方法,如下所示:
override suspend fun doWork(): Result {
try {
startListen()
awaitCancellation()
} finally {
stopListen()
return Result.success()
}
}
一切正常,但是当我调用 WorkManager.cancel 并取消我的工作时,WorkerWrapper 会引发内部异常:
I/WM-WorkerWrapper: Work [ id=721c463b-15aa-4daa-988d-a4c080915443, tags={ br.com.example.app.workers.MyWorker, WORKER_TAG } ] was cancelled
java.util.concurrent.CancellationException: Task was cancelled.
at androidx.work.impl.utils.futures.AbstractFuture.cancellationExceptionWithCause(AbstractFuture.java:1184)
at androidx.work.impl.utils.futures.AbstractFuture.getDoneValue(AbstractFuture.java:514)
at androidx.work.impl.utils.futures.AbstractFuture.get(AbstractFuture.java:475)
at androidx.work.impl.WorkerWrapper$2.run(WorkerWrapper.java:300)
at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
我没有找到任何其他看起来更合适的方式来阻止我的 CoroutineWorker,同时我觉得这不是阻止它的正确方法。
如果有人知道避免这种情况或抑制这种异常的另一种方法,我将不胜感激。
【问题讨论】:
标签: kotlin kotlin-coroutines android-workmanager