Hi El lun., 28 may. 2018 a las 9:04, Norman Gaywood (<ngayw...@gmail.com>) escribió:
> T""his simple program creates a thread to read a directory with dir() and > place the files on a channel. $N worker threads read that channel and > "process" (prints) the files. But I'm getting this "An operation first > awaited:" > error. > > I've read the traps page about this error several times, but still can't > make sense of it. Can some explain what's going on here? > > The directory contents: > $ ls > a b c traverse-dir0.p6 > > Running the program: > $ ./traverse-dir0.p6 > traverse-dir0.p6 > a > b > c > An operation first awaited: > in sub MAIN at ./traverse-dir0.p6 line 24 > in block <unit> at ./traverse-dir0.p6 line 5 > > Died with the exception: > Cannot find method 'path': no method cache and no .^find_method > in block at ./traverse-dir0.p6 line 16 > > The program: > $ cat traverse-dir0.p6 > #!/usr/bin/env perl6 > # There is a thread to populate $dir-channel by reading filenames in a > directory with dir() > # and $N worker threads to read the filenames from the $dir-channel. > > sub MAIN( Str $dir = ".", Int :$N = 4 ) { > > my $dir-channel = Channel.new(); > my $dir-read = start { > $dir-channel.send( $_ ) for dir $dir; > $dir-channel.close; > You are repeatedly closing the channel here. That accounts for the error. If you comment that out, it will just get stuck, but that's a different problem JJ PS: It would be great if you would post this question to StackOverflow too, you will get lots of knowlegeable answers and it will easy for everyone to find the answer there afterwards.