Dave wrote: > Still a bit too complex for my taste: perhaps we can use C<timeout> to > generate exceptions: > > my lazy::threaded $result := { slow_fn_imp @_ }; > loop { > timeout(60); > return $result; > CATCH Timeout { print "...$(time)\n" } > } > > At last, no C<tid>! (Reminder: the suggested semantics of the threaded > variable were that a FETCH to it blocks until the result of the thread is > available).
To nitpick: my $result is lazy::threaded := { slow_fn_imp @_ }; Because lazy::threaded isn't the I<return> type, it's the I<variable> type. loop { timeout(60); return $result; CATCH { when Timeout { print "...$(time)\n" } } Because C<CATCH> is like C<given $!>. I like that elegant use of threaded variables, by the way. Now write the C<timeout> function :-P. Luke