MCPcopy Index your code
hub / github.com/Effect-TS/effect / SchedulerRunner

Class SchedulerRunner

packages/effect/src/Scheduler.ts:31–87  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

29 * @category models
30 */
31export class SchedulerRunner {
32 running = false
33 tasks = new PriorityBuckets()
34
35 constructor(
36 readonly scheduleDrain: (depth: number, drain: (depth: number) => void) => void
37 ) {}
38
39 private starveInternal = (depth: number) => {
40 const tasks = this.tasks.buckets
41 this.tasks.buckets = []
42 for (const [_, toRun] of tasks) {
43 for (let i = 0; i < toRun.length; i++) {
44 toRun[i]()
45 }
46 }
47 if (this.tasks.buckets.length === 0) {
48 this.running = false
49 } else {
50 this.starve(depth)
51 }
52 }
53
54 private starve(depth = 0) {
55 this.scheduleDrain(depth, this.starveInternal)
56 }
57
58 scheduleTask(task: Task, priority: number) {
59 this.tasks.scheduleTask(task, priority)
60 if (!this.running) {
61 this.running = true
62 this.starve()
63 }
64 }
65 /**
66 * @since 3.20.0
67 * @category constructors
68 */
69 static cached(
70 scheduleDrain: (depth: number, drain: (depth: number) => void) => void
71 ) {
72 const fallback = new SchedulerRunner(scheduleDrain)
73 const runners = new WeakMap<RuntimeFiber<unknown, unknown>, SchedulerRunner>()
74
75 return (fiber?: RuntimeFiber<unknown, unknown>) => {
76 if (fiber === undefined) {
77 return fallback
78 }
79 let runner = runners.get(fiber)
80 if (runner === undefined) {
81 runner = new SchedulerRunner(scheduleDrain)
82 runners.set(fiber, runner)
83 }
84 return runner
85 }
86 }
87}
88

Callers

nothing calls this directly

Calls 1

starveMethod · 0.95

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…