| 1 | import * as Effect from "effect/Effect" |
| 2 | import * as Queue from "effect/Queue" |
| 3 | |
| 4 | const program = Effect.gen(function*() { |
| 5 | const queue = yield* Queue.make<number>() |
| 6 | |
| 7 | yield* Effect.gen(function*() { |
| 8 | yield* Queue.takeN(queue, 3) |
| 9 | }).pipe(Effect.forever, Effect.forkScoped) |
| 10 | |
| 11 | yield* Queue.offerAll(queue, [1, 2]) |
| 12 | yield* Queue.offerAll(queue, [3, 4]).pipe(Effect.delay("100 millis"), Effect.forkScoped) |
| 13 | yield* Queue.offerAll(queue, [5, 6, 7, 8]).pipe(Effect.delay("200 millis"), Effect.forkScoped) |
| 14 | |
| 15 | yield* Effect.sleep("500 millis") |
| 16 | }) |
| 17 | |
| 18 | Effect.runFork(Effect.scoped(program)) |