Hyperlinkv0.8.0-beta.28

FiberHandle

FiberHandle.makeconsteffect/FiberHandle.ts:138
<A = unknown, E = unknown>(): Effect.Effect<
  FiberHandle<A, E>,
  never,
  Scope.Scope
>

Creates a scoped FiberHandle that can store a single fiber.

Details

When the associated Scope is closed, the contained fiber will be interrupted. You can add a fiber to the handle using FiberHandle.run, and the fiber will be automatically removed from the FiberHandle when it completes.

Example (Creating a scoped fiber handle)

import { Effect, FiberHandle } from "effect"

Effect.gen(function*() {
  const handle = yield* FiberHandle.make()

  // run some effects
  yield* FiberHandle.run(handle, Effect.never)
  // this will interrupt the previous fiber
  yield* FiberHandle.run(handle, Effect.never)

  yield* Effect.sleep(1000)
}).pipe(
  Effect.scoped // The fiber will be interrupted when the scope is closed
)
constructors
export const make = <A = unknown, E = unknown>(): Effect.Effect<FiberHandle<A, E>, never, Scope.Scope> =>
  Effect.acquireRelease(
    Effect.sync(() => makeUnsafe<A, E>()),
    (handle) => {
      const state = handle.state
      if (state._tag === "Closed") return Effect.void
      handle.state = { _tag: "Closed" }
      return state.fiber ?
        Deferred.into(
          Effect.asVoid(Fiber.interruptAs(state.fiber, internalFiberId)),
          handle.deferred
        ) :
        Deferred.done(handle.deferred, Exit.void)
    }
  )
Referenced by 2 symbols