Я использую Monix для рабочего процесса асинхронной задачи.
Как убить бегущего Task
?
Task{ println("sleep")
Thread.sleep(200)
println("effect") }
.doOnCancel(Task(println("canceled")))
.timeout(100.milli) // timeout will do cancel
.runOnComplete(println)
@> Failure(java.util.concurrent.TimeoutException: Task timed-out after 100 milliseconds of inactivity)
sleep
canceled
effect <--- what !? , task is running. Isn't it canceled !?
Мое текущее решение, на мой взгляд, безобразно (проверка флага мешает повторному использованию кода):
var flag=true
Task{
println("sleep")
Thread.sleep(200)
if (flag)
println("effect")
}
.doOnCancel(Task{ flag=false; println("canceled") })
.timeout(100.milli) // timeout will do cancel
Если это невозможно, как убить запланированное, пока еще не выполненное Task
?
Моя неудачная попытка:
Task{ println("sleep"); Thread.sleep(200) }
.map{ _ => println("effect") }
.doOnCancel(Task(println("canceled")))
.timeout(100.milli) // timeout will do cancel
.runOnComplete(println)
К сожалению, он все еще показывает эффект после отмены. Я надеюсь, что запланированное и еще не выполненное задание можно отменить (.map(...)
- это еще один Task
, верно?)