Hyperlinkv0.8.0-beta.28

Effect

Effect.forkScopedconsteffect/Effect.ts:8642
<
  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>

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"
  })
)
supervision & fibers
Source effect/Effect.ts:864216 lines
export 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> = internal.forkScoped
Referenced by 9 symbols