syndicate-rkt/syndicate/task.rkt

22 lines
546 B
Racket

#lang racket/base
(provide queue-task!)
(require (only-in racket/exn exn->string))
(define-logger syndicate/task)
(define task-runner
(thread (lambda ()
(with-handlers ([exn? handle-unexpected-task-runner-termination])
(let loop ()
((thread-receive))
(loop))))))
(define (handle-unexpected-task-runner-termination e)
(log-syndicate/task-error "Task runner terminated unexpectedly!\n~a" (exn->string e))
(exit 1))
(define (queue-task! thunk)
(thread-send task-runner thunk))