我玩了一下。这是我做的:
#lang racket (require racket/engine) (define (test-engine allow-interrupt) (let loop ((n 1)) (allow-interrupt #f) (displayln (list 'step n)) (allow-interrupt #t) (sleep 1) (loop (add1 n)))) (define tee (engine test-engine)) (engine-run 2000 tee)
我注意到它可能在中间突破 displayln 所以要做 displayln 原子我利用提供的程序,在原子操作期间延迟中断。没有它,它将在下一个打印出其余部分 (engine-run 2000 tee) 而不是在它返回之前完成它。
displayln
(engine-run 2000 tee)