const concurrencyLimit = yield* Effect.makeSemaphore(1);
const queue = yield* Queue.unbounded<QueuedTransaction>();
yield* Effect.forkScoped(Stream.fromQueue(queue).pipe(
Stream.takeUntilEffect(() => Queue.isEmpty(queue)),
Stream.runForEach((innerTr) => concurrencyLimit.withPermits(1)(handleTransaction(queueId, innerTr))),
Effect.onExit(() => Effect.gen(function* () {
console.log('Project queue done');
yield* updateSyncStatus();
})),
));
const concurrencyLimit = yield* Effect.makeSemaphore(1);
const queue = yield* Queue.unbounded<QueuedTransaction>();
yield* Effect.forkScoped(Stream.fromQueue(queue).pipe(
Stream.takeUntilEffect(() => Queue.isEmpty(queue)),
Stream.runForEach((innerTr) => concurrencyLimit.withPermits(1)(handleTransaction(queueId, innerTr))),
Effect.onExit(() => Effect.gen(function* () {
console.log('Project queue done');
yield* updateSyncStatus();
})),
));