(define (parallel-or thunk1 thunk2)
(let* ([result1 #f]
[result2 #f]
[thread1 (thread (lambda () (set! result1 (thunk1))))]
[thread2 (thread (lambda () (set! result2 (thunk2))))]
[finished-thread (object-wait-multiple #f thread1 thread2)])
(cond
[(eq? finished-thread thread1) (kill-thread thread2)
result1]
[else (kill-thread thread1)
result2])))