>>> *** Source:
    prime P1 as Pipe(Range(10_000));
    P1$ResultNames;
    P1.SData->Count();
    task T
        with { S: P1.SData }
        prime { publish C := 0; }
        play {
            publish C := 0;
            task P2 as Pipe(S * 2);
            play P2;
            while (P2$State = "Playing") {
                poll P2;
                publish C := C + 1;
            }
            publish D := P2.Data;
        }
    P1.SData->Count();
    prime T;
    T$ResultNames;
    T.C;
    __mute__;
    while (T.C = 0 and T$State = "Paused") {
        play T;
        pause T;
        poll T;
    }
    __unmute__;
    T.C > 0;
    // Mute around `finish T` since there is a race - T might already be finished.
    __mute__;
    finish T;
    __unmute__;
    T$ResultNames;
    T.D->Count();
    // P1 should be finished.
    poll P1;
    P1.SData->Count();

>>> *** Instructions:
   0) [0] TaskProc prime P1 as Pipe(Range(10000))
   1) [0] Expr P1$ResultNames
   2) [0] Expr P1.SData->Count()
   3) [0] TaskBlock task T with { S : P1.SData } prime {...}
   4) [0] Expr P1.SData->Count()
   5) [0] TaskCmd prime T
   6) [0] Expr T$ResultNames
   7) [0] Expr T.C
   8) [0] Expr __mute__
   9) [0] JumpIfNot 16 (0=>0) T.C @= 0 and T$State @= "Paused"
  10) [0] Enter (0=>1)
  11) [1] TaskCmd play T
  12) [1] TaskCmd pause T
  13) [1] TaskCmd poll T
  14) [1] Leave (1=>0)
  15) [0] Jump 9 (0=>0)
  16) [0] Expr __unmute__
  17) [0] Expr T.C $> 0
  18) [0] Expr __mute__
  19) [0] TaskCmd finish T
  20) [0] Expr __unmute__
  21) [0] Expr T$ResultNames
  22) [0] Expr T.D->Count()
  23) [0] TaskCmd poll P1
  24) [0] Expr P1.SData->Count()
  25) [0] End

>    0) [0] TaskProc prime P1 as Pipe(Range(10000))
Task 'P1' added
Task 'P1' now playing
Task 'P1' now paused
>    1) [0] Expr P1$ResultNames
(Count, SData)
>    2) [0] Expr P1.SData->Count()
0
*** Ctx ping count: 0
>    3) [0] TaskBlock task T with { S : P1.SData } prime {...}
Task 'T' added
>    4) [0] Expr P1.SData->Count()
0
*** Ctx ping count: 0
>    5) [0] TaskCmd prime T
Task 'P1' forced playing
Task 'T' now playing
Task 'T' now paused
Task 'P1' now paused
>    6) [0] Expr T$ResultNames
(C,)
>    7) [0] Expr T.C
0
>    8) [0] Expr __mute__
>   17) [0] Expr T.C $> 0
true
>   18) [0] Expr __mute__
>   21) [0] Expr T$ResultNames
(C, D)
>   22) [0] Expr T.D->Count()
10000
*** Ctx ping count: 0
>   23) [0] TaskCmd poll P1
Task 'P1' finished
>   24) [0] Expr P1.SData->Count()
10000
*** Ctx ping count: 0
>   25) [0] End
###

