MCPcopy
hub / github.com/Effect-TS/effect / ControlledScheduler

Class ControlledScheduler

packages/effect/src/Scheduler.ts:224–267  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

222 * @category constructors
223 */
224export class ControlledScheduler implements Scheduler {
225 /**
226 * @since 2.0.0
227 */
228 tasks = new PriorityBuckets()
229
230 /**
231 * @since 2.0.0
232 */
233 deferred = false
234
235 /**
236 * @since 2.0.0
237 */
238 scheduleTask(task: Task, priority: number, fiber?: RuntimeFiber<unknown, unknown>) {
239 if (this.deferred) {
240 defaultScheduler.scheduleTask(task, priority, fiber)
241 } else {
242 this.tasks.scheduleTask(task, priority)
243 }
244 }
245
246 /**
247 * @since 2.0.0
248 */
249 shouldYield(fiber: RuntimeFiber<unknown, unknown>): number | false {
250 return fiber.currentOpCount > fiber.getFiberRef(core.currentMaxOpsBeforeYield)
251 ? fiber.getFiberRef(core.currentSchedulingPriority)
252 : false
253 }
254
255 /**
256 * @since 2.0.0
257 */
258 step() {
259 const tasks = this.tasks.buckets
260 this.tasks.buckets = []
261 for (const [_, toRun] of tasks) {
262 for (let i = 0; i < toRun.length; i++) {
263 toRun[i]()
264 }
265 }
266 }
267}
268
269/**
270 * @since 2.0.0

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected