22 lines
546 B
Racket
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))
|