const program = Effect.gen(function* (_) {
const rendevous = yield* _(Queue.bounded<string>(0));
const fiber = yield* _(
Effect.fork(
Effect.gen(function* (_) {
yield* _(Effect.sleep("100 millis"));
yield* _(Effect.log("sending message"));
yield* _(Queue.offer(rendevous, "Hello World"));
yield* _(Effect.log("sent message"));
})
)
);
const fiber2 = yield* _(
Effect.fork(
Effect.gen(function* (_) {
yield* _(Effect.sleep("50 millis"));
yield* _(Effect.log("receiving message"));
const message = yield* _(Queue.take(rendevous));
yield* _(Effect.log("received message"));
yield* _(Effect.log(message));
})
)
);
yield* _(Fiber.join(Fiber.zip(fiber, fiber2)));
});
await Effect.runPromise(program);
const program = Effect.gen(function* (_) {
const rendevous = yield* _(Queue.bounded<string>(0));
const fiber = yield* _(
Effect.fork(
Effect.gen(function* (_) {
yield* _(Effect.sleep("100 millis"));
yield* _(Effect.log("sending message"));
yield* _(Queue.offer(rendevous, "Hello World"));
yield* _(Effect.log("sent message"));
})
)
);
const fiber2 = yield* _(
Effect.fork(
Effect.gen(function* (_) {
yield* _(Effect.sleep("50 millis"));
yield* _(Effect.log("receiving message"));
const message = yield* _(Queue.take(rendevous));
yield* _(Effect.log("received message"));
yield* _(Effect.log(message));
})
)
);
yield* _(Fiber.join(Fiber.zip(fiber, fiber2)));
});
await Effect.runPromise(program);