syndicate-2017/racket/syndicate/examples/actor/chain.rkt

18 lines
429 B
Racket

#lang syndicate/actor
(require/activate syndicate/drivers/timer)
(define (sleep sec)
(define timer-id (gensym 'sleep))
(until (message (timer-expired timer-id _))
(on-start (send! (set-timer timer-id (* sec 1000.0) 'relative)))))
(define (chain-step n)
(printf "chain-step ~v\n" n)
(actor* (sleep 1)
(if (< n 5)
(chain-step (+ n 1))
(printf "done.\n"))))
(chain-step 0)