#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))