effect-io-ai

Package: effect
Module: Effect

Effect.forkScoped

Forks the fiber in a Scope, interrupting it when the scope is closed.

Example (Forking into the current scope)

import { Effect } from "effect"

const backgroundTask = Effect.gen(function*() {
  yield* Effect.sleep("5 seconds")
  yield* Effect.log("Background task completed")
  return "result"
})

const program = Effect.scoped(
  Effect.gen(function*() {
    const fiber = yield* backgroundTask.pipe(Effect.forkScoped)

    // or fork a fiber that starts immediately:
    yield* backgroundTask.pipe(Effect.forkScoped({ startImmediately: true }))

    yield* Effect.log("Task forked in scope")
    yield* Effect.sleep("1 second")

    // Fiber will be interrupted when scope closes
    return "scope completed"
  })
)

Signature

declare const forkScoped: <Arg extends Effect<any, any, any> | { readonly startImmediately?: boolean | undefined; readonly uninterruptible?: boolean | "inherit" | undefined; } | undefined = { readonly startImmediately?: boolean | undefined; readonly uninterruptible?: boolean | "inherit" | undefined; }>(effectOrOptions?: Arg, options?: { readonly startImmediately?: boolean | undefined; readonly uninterruptible?: boolean | "inherit" | undefined; } | undefined) => [Arg] extends [Effect<infer _A, infer _E, infer _R>] ? Effect<Fiber<_A, _E>, never, _R | Scope> : <A, E, R>(self: Effect<A, E, R>) => Effect<Fiber<A, E>, never, R | Scope>

Source

Since v2.0.0