Cursus Raku / Programmatio functionalis, simultanea, reactiva et retialis / Programmatio reactiva / react et whenever / whenever

Quiz — whenever et done

Quid haec programma imprimit?

my @out;

react {
    whenever Supply.from-list(1, 2, 3) {
        @out.push($_);
        done if $_ == 2;
    }
    whenever Supply.from-list(10, 20) {
        @out.push($_);
    }
}

say @out;
1[1 2]
0[1 2 10 20]
0[1 2 3 10 20]
0[10 20]

Primum whenever 1 immittit, deinde 2 — et ad 2 done vocat. Punctum grave est quod done totum blocum react finit, non solum proprium whenever: reliquum supply primi (3) et totum supply secundum (10, 20) praecidantur antequam tradantur. Itaque @out solum [1 2] tenet. Si done solum proprium fluxum silentio premeret, [1 2 10 20] vidisses — sed unum done omnes reactiones simul sistit.

Quiz — whenever   |   Supply extra definita