Raku kurss / Funkcionālā, paralēlā, reaktīvā un tīmekļa programmēšana / Paralēlā programmēšana / Kanāli

Kanāla aizvēršana

Kad ražotājam vairs nav ko sūtīt, tas kanālam izsauc .close. Aizvēršana pavēsta patērētājam, ka straume ir beigusies.

Ērtākais veids, kā patērēt aizvērtu kanālu, ir .list, kas dod jums katru atlikušo vērtību un beidzas, tiklīdz kanāls ir aizvērts:

my $c = Channel.new;
$c.send(1);
$c.send(2);
$c.send(3);
$c.close;

say $c.list; # (1 2 3)

Tā kā .list gaida kanāla aizvēršanu, tā lieliski der uzdevumam «savāc visu, ko ražotājs sūta». Rezultātu var apstrādāt kā jebkuru citu sarakstu — saskaitīt, saskaitīt elementus un tā tālāk:

my $c = Channel.new;
$c.send($_) for 1..5;
$c.close;

say [+] $c.list; # 15

Aizvēršana ir tas, pēc kā patērētājs zina, kad apstāties. Bez tās .list (vai .receive cikls) mūžīgi gaidītu vērtību, kas nekad nepienāk. Vienmēr aizveriet kanālu, kad sūtīšana ir pabeigta.

Prakse

Jūs gaida 1 viktorīna par šī temata saturu.

Kursa navigācija

Viktorīna — Kanāli   |   Viktorīna — Kanāla aizvēršana


💪 Vai arī dodieties tieši uz šīs sadaļas vingrinājumiem.