请考虑以下代码:
process := [ (Delay forSeconds: 10) wait ]
forkAt: Processor userBackgroundPriority.
process terminate.
process isTerminated. "--> false"
process resume. "process has been suspended but not terminated"
(Delay forSeconds: 10) wait.
process isTerminated "--> true"
正如您所看到的,在对块进行评估之前(即在这种情况下十秒之后),该过程不会终止。
有没有办法立即终止进程? 另外:有没有人知道为什么首先评估块?
修改 我可以看到为什么要评估块。上面代码的问题当然是我尝试在它变为活动之前终止该进程。如果我不想等待延迟到期怎么办?
答案 0 :(得分:1)
发送terminate
后,您的流程暂停(通过发送isSuspended
检查),以便除非恢复,否则不会运行。您从isTerminated
收到错误,因为该进程尚无法启动(请查看isTerminated
的源代码以了解原因)。
所以实际上你的进程是不活跃的,一旦你放弃引用就会被垃圾收集,这对你来说应该和“终止”一样好。
(免责声明:我正在查看Squeak代码,而不是Pharo,但系统的这一部分应该基本相同)