Concurrency
Background
Section titled “Background”Given a file named “pen.json” with:
{ "type": "application", "dependencies": { "Os": "pen:///os" }}Use spawn function
Section titled “Use spawn function”Given a file named “main.pen” with:
main = \(ctx context) none { f = go(\() none { none })
f()}When I successfully run pen build
Then I successfully run ./app.
Use race function
Section titled “Use race function”Given a file named “main.pen” with:
import Os'Process
main = \(ctx context) none { xs = race([[none] [none none]])
if [x, ...xs] = xs { x() } else { Process'Exit(ctx.Os, 1) }}When I successfully run pen build
Then I successfully run ./app.
Use race function with multiple lists
Section titled “Use race function with multiple lists”Given a file named “main.pen” with:
import Os'Process
main = \(ctx context) none { xs = race([[none] [none none], [none none]])
if [x, ...xs] = xs { x() } else { Process'Exit(ctx.Os, 1) }}When I successfully run pen build
Then I successfully run ./app.
Use race function to get the first result
Section titled “Use race function to get the first result”Given a file named “main.pen” with:
import Os'Context { Context }import Os'Processimport Os'Time
main = \(ctx context) none { xs = race([[boolean] [boolean (\() boolean { loop(ctx.Os) false })()], [boolean true], ])
if [x, ...xs] = xs { if x() { none } else { Process'Exit(ctx.Os, 1) } } else { Process'Exit(ctx.Os, 1) }}
loop = \(ctx Context) none { Time'Sleep(ctx, 1) loop(ctx)}When I successfully run pen build
Then I successfully run ./app.
Use race function and get all elements
Section titled “Use race function and get all elements”Given a file named “main.pen” with:
import Os'Process
main = \(ctx context) none { xs = race([[none] [none none], [none none]])
if xs == [none none, none] { none } else { Process'Exit(ctx.Os, 1) }}When I successfully run pen build
Then I successfully run ./app.