#!/usr/bin/env perl6 sub channel (Str $msg --> Channel) { my $c = Channel.new; start { for ^Inf -> $i { my $rand = (^2e3).pick / 1000; $c.send( "$msg $i = $rand ms" ); sleep $rand; # 0–2 seconds } } return $c; } my $c = channel("Message"); say "Listening"; my $timeout = Promise.in(1.75); loop { if $c.poll -> $item { say qq|Got: "$item"|; # Reset Timeout $timeout = Promise.in(1.75); # Exit if channel takes > 1.75 seconds } elsif $timeout { say "Timeout"; last } } say "Finished";