In Promise§

See primary documentation in context for method in

method in(Promise:U: $seconds, :$scheduler = $*SCHEDULER --> Promise:D)

Creates a new Promise that will be kept in $seconds seconds, or later.

my $proc = Proc::Async.new('raku', '-e', 'sleep 10; warn "end"');

my $result = await Promise.anyof(
    my $promise = $proc.start,  # may or may not work in time
    Promise.in(5).then: {       # fires after 5 seconds no matter what
        unless $promise {       # don't do anything if we were successful
            note 'timeout';
            $proc.kill;
        }
    }
).then: { $promise.result }
# OUTPUT: «timeout␤»

$seconds can be fractional or negative. Negative values are treated as 0 (i.e. keeping the returned Promise right away).

Please note that situations like these are often more clearly handled with a react and whenever block.