Effect.gen(function* (_) {
const scope = yield* _(Scope.make());
const pubsub = yield* _(PubSub.unbounded());
const queue = yield* _(PubSub.subscribe(pubsub), Scope.extend(scope));
yield* _(
Stream.fromQueue(queue),
Stream.mapEffect(() =>
Effect.gen(function* (_) {
yield* _(Effect.addFinalizer(() => Console.log('Finalizer')));
yield* _(Console.log('start work...'));
yield* _(Effect.sleep('1 seconds'));
yield* _(Console.log('done work !'));
}),
),
Stream.runDrain,
Effect.forkScoped,
Scope.extend(scope),
);
yield* _(PubSub.publish(pubsub, 1));
yield* _(Effect.sleep('100 millis'));
yield* _(Scope.close(scope, Exit.unit));
yield* _(Effect.sleep('2 seconds'));
yield* _(Console.log('exit'));
}).pipe(Effect.scoped, Effect.runPromise);
Effect.gen(function* (_) {
const scope = yield* _(Scope.make());
const pubsub = yield* _(PubSub.unbounded());
const queue = yield* _(PubSub.subscribe(pubsub), Scope.extend(scope));
yield* _(
Stream.fromQueue(queue),
Stream.mapEffect(() =>
Effect.gen(function* (_) {
yield* _(Effect.addFinalizer(() => Console.log('Finalizer')));
yield* _(Console.log('start work...'));
yield* _(Effect.sleep('1 seconds'));
yield* _(Console.log('done work !'));
}),
),
Stream.runDrain,
Effect.forkScoped,
Scope.extend(scope),
);
yield* _(PubSub.publish(pubsub, 1));
yield* _(Effect.sleep('100 millis'));
yield* _(Scope.close(scope, Exit.unit));
yield* _(Effect.sleep('2 seconds'));
yield* _(Console.log('exit'));
}).pipe(Effect.scoped, Effect.runPromise);