SchedulerA scheduler manages the execution of Effect fibers by controlling when queued tasks run.
When to use
Use to define or provide custom runtime scheduling behavior for Effect fibers.
Details
A scheduler determines the execution mode, schedules tasks with different priorities, and decides when fibers should yield control after consuming their operation budget.
export interface Scheduler {
readonly Scheduler.executionMode: "sync" | "async"executionMode: "sync" | "async"
Scheduler.shouldYield(fiber: Fiber.Fiber<unknown, unknown>): booleanshouldYield(fiber: Fiber.Fiber<unknown, unknown>(parameter) fiber: {
id: number;
currentOpCount: number;
getRef: <A>(ref: Context.Reference<A>) => A;
context: Context.Context<never>;
setContext: (context: Context.Context<never>) => void;
currentScheduler: Scheduler;
currentDispatcher: SchedulerDispatcher;
currentSpan: AnySpan | undefined;
currentLogLevel: LogLevel;
minimumLogLevel: LogLevel;
currentStackFrame: StackFrame | undefined;
maxOpsBeforeYield: number;
currentPreventYield: boolean;
addObserver: (cb: (exit: Exit<A, E>) => void) => () => void;
interruptUnsafe: (fiberId?: number | undefined, annotations?: Context.Context<never> | undefined) => void;
pollUnsafe: () => Exit<A, E> | 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; <…;
}
fiber: import FiberFiber.type Fiber.Fiber = /*unresolved*/ anyFiber<unknown, unknown>): boolean
Scheduler.makeDispatcher(): SchedulerDispatchermakeDispatcher(): SchedulerDispatcher
}
/**
* A dispatcher created by a `Scheduler` for enqueuing tasks and forcing queued
* tasks to run.
*
* **When to use**
*
* Use when implementing or testing scheduler-created dispatchers that enqueue
* prioritized runtime tasks and flush queued work deterministically.
*
* **Details**
*
* `scheduleTask` queues a task with a priority. `flush` drains pending work
* synchronously, which is useful when callers need deterministic completion of
* already scheduled tasks. Lower priority numbers run first, and equal
* priorities run in FIFO order.
*
* @category models
* @since 4.0.0
*/
export interface SchedulerDispatcher {
SchedulerDispatcher.scheduleTask(task: () => void, priority: number): voidscheduleTask(task: () => voidtask: () => void, priority: numberpriority: number): void
SchedulerDispatcher.flush(): voidflush(): void
}
/**
* Context reference for the scheduler used by the Effect runtime.
*
* **When to use**
*
* Use when you need to replace scheduling behavior globally in tests or runtime
* setup, such as forcing deterministic task dispatch.
*
* **Details**
*
* The default value creates a `MixedScheduler`. Provide this service to
* customize execution mode, task dispatching, or yield behavior.
*
* @category references
* @since 2.0.0
*/
export const const Scheduler: Context.Reference<Scheduler>const Scheduler: {
key: string;
Service: {
executionMode: "sync" | "async";
shouldYield: (fiber: Fiber.Fiber<unknown, unknown>) => boolean;
makeDispatcher: () => SchedulerDispatcher;
};
defaultValue: () => Shape;
of: (this: void, self: Scheduler) => Scheduler;
context: (self: Scheduler) => Context.Context<never>;
use: (f: (service: Scheduler) => Effect<A, E, R>) => Effect<A, E, R>;
useSync: (f: (service: Scheduler) => A) => Effect<A, never, never>;
Identifier: Identifier;
stack: string | 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; <…;
toString: () => string;
toJSON: () => unknown;
}
A scheduler manages the execution of Effect fibers by controlling when queued
tasks run.
When to use
Use to define or provide custom runtime scheduling behavior for Effect fibers.
Details
A scheduler determines the execution mode, schedules tasks with different
priorities, and decides when fibers should yield control after consuming
their operation budget.
Context reference for the scheduler used by the Effect runtime.
When to use
Use when you need to replace scheduling behavior globally in tests or runtime
setup, such as forcing deterministic task dispatch.
Details
The default value creates a MixedScheduler. Provide this service to
customize execution mode, task dispatching, or yield behavior.
Scheduler: import ContextContext.type Context.Reference = /*unresolved*/ anyReference<Scheduler> = import ContextContext.Reference<Scheduler>("effect/Scheduler", {
defaultValue: () => MixedSchedulerdefaultValue: () => new constructor MixedScheduler(executionMode?: "sync" | "async", setImmediateFn?: (f: () => void) => () => void): MixedSchedulerProvides a scheduler implementation that batches queued tasks and dispatches them by
priority.
When to use
Use when you need the default runtime scheduler directly, including a
scheduler that batches queued work by priority and preserves FIFO order within
each priority.
Details
MixedScheduler supports synchronous and asynchronous execution modes, uses
operation counts to decide when fibers should yield, and is the default
scheduler implementation.
MixedScheduler()
})