diff --git a/lib/src/scheduler/taskScheduler.ts b/lib/src/scheduler/taskScheduler.ts index c352a85..92fd028 100644 --- a/lib/src/scheduler/taskScheduler.ts +++ b/lib/src/scheduler/taskScheduler.ts @@ -325,6 +325,7 @@ export function createTaskScheduler(newPromise?: (executor: PromiseExecutor { _removeTask(_running, taskDetail); + _removeTask(_waiting, taskDetail); // If there was a timeout stop and clear taskDetail.t && taskDetail.t.cancel(); diff --git a/lib/test/src/scheduler/scheduler.test.ts b/lib/test/src/scheduler/scheduler.test.ts index eccf128..4d4a834 100644 --- a/lib/test/src/scheduler/scheduler.test.ts +++ b/lib/test/src/scheduler/scheduler.test.ts @@ -504,6 +504,24 @@ function batchTests(testKey: string, definition: TestDefinition) { ); }); + it("Disable Abort Stale timer clears settled tasks", (done) => { + let scheduler = createTaskScheduler(createAsyncPromise, "no-stale-" + testKey); + scheduler.setStaleTimeout(0); + + for (let lp = 0; lp < 100; lp++) { + scheduler.queue(() => lp); + } + + let finalTask = scheduler.queue(() => 100); + doAwait(finalTask, () => { + let schedulerState: any = (scheduler as any)["[[SchedulerState]]"]; + assert.equal(true, scheduler.idle, "The scheduler should be idle"); + assert.equal(getLength(schedulerState.r), 0, "Running tasks should be empty"); + assert.equal(getLength(schedulerState.w), 0, "Waiting tasks should be empty"); + done(); + }, failOnCall); + }); + it("Aborting Multiple Stale events", (done) => { let scheduler = createTaskScheduler(null as any, "AbortMultiple-" + testKey); scheduler.setStaleTimeout(100); @@ -731,4 +749,4 @@ function batchTests(testKey: string, definition: TestDefinition) { done(); }); }); -} \ No newline at end of file +}