我将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
如果不可能,我们如何在 not-yet-ran 时杀死计划的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
,对吗?)