<A, E>(self: FiberSet<A, E>): Effect.Effect<void, E>Joins all fibers in the FiberSet. If any fiber in the set terminates with a failure, the returned Effect will terminate with the first failure that occurred.
Example (Joining failing fibers)
import { Effect, FiberSet } from "effect"
Effect.gen(function*() {
const set = yield* FiberSet.make()
yield* FiberSet.add(set, Effect.runFork(Effect.fail("error")))
// parent fiber will fail with "error"
yield* FiberSet.join(set)
})combinators
Source effect/FiberSet.ts:6802 lines
export const const join: <A, E>(
self: FiberSet<A, E>
) => Effect.Effect<void, E>
Joins all fibers in the FiberSet. If any fiber in the set terminates with a failure,
the returned Effect will terminate with the first failure that occurred.
Example (Joining failing fibers)
import { Effect, FiberSet } from "effect"
Effect.gen(function*() {
const set = yield* FiberSet.make()
yield* FiberSet.add(set, Effect.runFork(Effect.fail("error")))
// parent fiber will fail with "error"
yield* FiberSet.join(set)
})
join = <function (type parameter) A in <A, E>(self: FiberSet<A, E>): Effect.Effect<void, E>A, function (type parameter) E in <A, E>(self: FiberSet<A, E>): Effect.Effect<void, E>E>(self: FiberSet<A, E>(parameter) self: {
deferred: Deferred.Deferred<void, unknown>;
state: { readonly _tag: "Open"; readonly backing: Set<Fiber.Fiber<A, E>> } | { readonly _tag: "Closed" };
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
self: interface FiberSet<out A = unknown, out E = unknown>A FiberSet is a collection of fibers that can be managed together.
When the associated Scope is closed, all fibers in the set will be interrupted.
Example (Managing fibers in a set)
import { Effect, FiberSet } from "effect"
const program = Effect.gen(function*() {
const set = yield* FiberSet.make<string, string>()
// Add fibers to the set
yield* FiberSet.run(set, Effect.succeed("hello"))
yield* FiberSet.run(set, Effect.succeed("world"))
// Wait for all fibers to complete
yield* FiberSet.awaitEmpty(set)
})
FiberSet<function (type parameter) A in <A, E>(self: FiberSet<A, E>): Effect.Effect<void, E>A, function (type parameter) E in <A, E>(self: FiberSet<A, E>): Effect.Effect<void, E>E>): import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<void, function (type parameter) E in <A, E>(self: FiberSet<A, E>): Effect.Effect<void, E>E> =>
import DeferredDeferred.await(self: FiberSet<A, E>(parameter) self: {
deferred: Deferred.Deferred<void, unknown>;
state: { readonly _tag: "Open"; readonly backing: Set<Fiber.Fiber<A, E>> } | { readonly _tag: "Closed" };
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
self.FiberSet<out A = unknown, out E = unknown>.deferred: Deferred.Deferred<void, unknown>(property) FiberSet<out A = unknown, out E = unknown>.deferred: {
effect: Effect<A, E>;
resumes: Array<(effect: Effect<A, E>) => void> | undefined;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
deferred as import DeferredDeferred.type Deferred.Deferred = /*unresolved*/ anyDeferred<void, function (type parameter) E in <A, E>(self: FiberSet<A, E>): Effect.Effect<void, E>E>)