diff --git a/knots/promise.scm b/knots/promise.scm index 6aa3f0b..c01d219 100644 --- a/knots/promise.scm +++ b/knots/promise.scm @@ -28,6 +28,7 @@ #:export (fibers-promise? fibers-delay + fibers-delay/eager fibers-force fibers-promise-reset fibers-promise-result-available?)) @@ -105,6 +106,20 @@ (raise-exception res) (apply values res)))))) + +(define (fibers-delay/eager thunk) + (let ((promise (fibers-delay thunk))) + (spawn-fiber + (lambda () + (with-exception-handler + (lambda _ + ;; Silently handle this exception + #f) + (lambda () + (fibers-force promise)) + #:unwind? #t))) + promise)) + (define (fibers-promise-reset fp) (atomic-box-set! (fibers-promise-values-box fp) #f))