Await a fixed number of microtask checkpoints in order and report the resume sequence and drain state.

microtask checkpoint Each await yields to the microtask queue and resumes in order, so the checkpoint count and resume sequence stay deterministic.

Microtask Checkpoint Coordination Report

seedTasks
microtask_checkpoint_coordination.js
Replay: real traced execution (multi-file project)
const seedTasks = 2;
let checkpoints = 0;
let order = "";

async function coordinate(count) {
    for (let i = 1; i <= count; i++) {
        await Promise.resolve(i);
        checkpoints += 1;
        order += i;
    }
    let outcome = "idle";
    if (checkpoints >= 3) {
        outcome = "drained";
    } else if (checkpoints === 2) {
        outcome = "checked";
    } else if (checkpoints === 1) {
        outcome = "primed";
    }
    console.log(`tasks=${count} checkpoints=${checkpoints} order=${order} status=${outcome}`);
}

coordinate(seedTasks);
const seedTasks = 1;
let checkpoints = 0;
let order = "";

async function coordinate(count) {
    for (let i = 1; i <= count; i++) {
        await Promise.resolve(i);
        checkpoints += 1;
        order += i;
    }
    let outcome = "idle";
    if (checkpoints >= 3) {
        outcome = "drained";
    } else if (checkpoints === 2) {
        outcome = "checked";
    } else if (checkpoints === 1) {
        outcome = "primed";
    }
    console.log(`tasks=${count} checkpoints=${checkpoints} order=${order} status=${outcome}`);
}

coordinate(seedTasks);
const seedTasks = 3;
let checkpoints = 0;
let order = "";

async function coordinate(count) {
    for (let i = 1; i <= count; i++) {
        await Promise.resolve(i);
        checkpoints += 1;
        order += i;
    }
    let outcome = "idle";
    if (checkpoints >= 3) {
        outcome = "drained";
    } else if (checkpoints === 2) {
        outcome = "checked";
    } else if (checkpoints === 1) {
        outcome = "primed";
    }
    console.log(`tasks=${count} checkpoints=${checkpoints} order=${order} status=${outcome}`);
}

coordinate(seedTasks);
  1. seedTasks ← 2, checkpoints ← 0, order ← (empty)

    1const seedTasks→ 2 = 2;  //@seedTasks=1, 32let checkpoints→ 0 = 0;3let order→ (empty) = "";45async function coordinate(count) {6    for (let i = 1; i <= count; i++) {7        await Promise.resolve(i);8        checkpoints += 1;9        order += i;10    }11    let outcome = "idle";12    if (checkpoints >= 3) {13        outcome = "drained";14    } else if (checkpoints === 2) {15        outcome = "checked";16    } else if (checkpoints === 1) {17        outcome = "primed";18    }19    console.log(`tasks=${count} checkpoints=${checkpoints} order=${order} status=${outcome}`);20}2122coordinate(seedTasks2);
  2. async function coordinate(count)

    2let checkpoints = 0;3let order = "";45async function coordinate(count2) {6    for (let i = 1; i <= count; i++) {
  3. for (let i = 1; i <= count; i++)

    pass 1 of 2
    5async function coordinate(count) {6    for (let i1 = 1; i <= count2; i++) {7        await Promise.resolve(i1);8        checkpoints += 1;
  4. checkpoints ← 1, order ← 1

    5async function coordinate(count) {6    for (let i = 1; i <= count; i++) {7        await Promise.resolve(i1);8        checkpoints += 1;9        order += i1;10    }11    let outcome = "idle";12    if (checkpoints >= 3) {13        outcome = "drained";14    } else if (checkpoints === 2) {15        outcome = "checked";16    } else if (checkpoints === 1) {17        outcome = "primed";18    }19    console.log(`tasks=${count} checkpoints=${checkpoints} order=${order} status=${outcome}`);20}2122coordinate(seedTasks2);
    values this step1checkpoints1order
  5. checkpoints ← 2, order ← 12

    pass 2 of 2
    5async function coordinate(count) {6    for (let i2 = 1; i <= count2; i++) {7        await Promise.resolve(i2);8        checkpoints += 1;9        order += i2;10    }
    values this step2checkpoints12order
  6. outcome ← idle

    9    order += i;10}11let outcome→ idle = "idle";12if (checkpoints >= 3) {
  7. if (checkpoints === 2)

    13    outcome = "drained";14} else if (checkpoints2 === 2) {15    outcome = "checked";16} else if (checkpoints === 1) {
  8. console.log(`tasks=${count} checkpoints=${checkpoints} order=${order} …

    17        outcome = "primed";18    }19    console.log(`tasks=${count2} checkpoints=${checkpoints2} order=${order12} status=${outcomechecked}`);20}
    outputtasks=2 checkpoints=2 order=12 status=checked
  1. seedTasks ← 1, checkpoints ← 0, order ← (empty)

    1const seedTasks→ 1 = 1;2let checkpoints→ 0 = 0;3let order→ (empty) = "";45async function coordinate(count) {6    for (let i = 1; i <= count; i++) {7        await Promise.resolve(i);8        checkpoints += 1;9        order += i;10    }11    let outcome = "idle";12    if (checkpoints >= 3) {13        outcome = "drained";14    } else if (checkpoints === 2) {15        outcome = "checked";16    } else if (checkpoints === 1) {17        outcome = "primed";18    }19    console.log(`tasks=${count} checkpoints=${checkpoints} order=${order} status=${outcome}`);20}2122coordinate(seedTasks1);
  2. async function coordinate(count)

    2let checkpoints = 0;3let order = "";45async function coordinate(count1) {6    for (let i = 1; i <= count; i++) {
  3. for (let i = 1; i <= count; i++)

    5async function coordinate(count) {6    for (let i1 = 1; i <= count1; i++) {7        await Promise.resolve(i1);8        checkpoints += 1;
  4. checkpoints ← 1, order ← 1, outcome ← idle

    5async function coordinate(count) {6    for (let i = 1; i <= count; i++) {7        await Promise.resolve(i1);8        checkpoints += 1;9        order += i1;10    }11    let outcome→ idle = "idle";12    if (checkpoints >= 3) {13        outcome = "drained";14    } else if (checkpoints === 2) {15        outcome = "checked";16    } else if (checkpoints === 1) {17        outcome = "primed";18    }19    console.log(`tasks=${count} checkpoints=${checkpoints} order=${order} status=${outcome}`);20}2122coordinate(seedTasks1);
    values this step1checkpoints1order
  5. if (checkpoints === 1)

    15    outcome = "checked";16} else if (checkpoints1 === 1) {17    outcome = "primed";18}
  6. console.log(`tasks=${count} checkpoints=${checkpoints} order=${order} …

    17        outcome = "primed";18    }19    console.log(`tasks=${count1} checkpoints=${checkpoints1} order=${order1} status=${outcomeprimed}`);20}
    outputtasks=1 checkpoints=1 order=1 status=primed
  1. seedTasks ← 3, checkpoints ← 0, order ← (empty)

    1const seedTasks→ 3 = 3;2let checkpoints→ 0 = 0;3let order→ (empty) = "";45async function coordinate(count) {6    for (let i = 1; i <= count; i++) {7        await Promise.resolve(i);8        checkpoints += 1;9        order += i;10    }11    let outcome = "idle";12    if (checkpoints >= 3) {13        outcome = "drained";14    } else if (checkpoints === 2) {15        outcome = "checked";16    } else if (checkpoints === 1) {17        outcome = "primed";18    }19    console.log(`tasks=${count} checkpoints=${checkpoints} order=${order} status=${outcome}`);20}2122coordinate(seedTasks3);
  2. async function coordinate(count)

    2let checkpoints = 0;3let order = "";45async function coordinate(count3) {6    for (let i = 1; i <= count; i++) {
  3. for (let i = 1; i <= count; i++)

    pass 1 of 3
    5async function coordinate(count) {6    for (let i1 = 1; i <= count3; i++) {7        await Promise.resolve(i1);8        checkpoints += 1;
    All 3 passes — pass 1 is the card above
    passicheckpointsorder
    11
    22212
    333123
  4. checkpoints ← 1, order ← 1

    5async function coordinate(count) {6    for (let i = 1; i <= count; i++) {7        await Promise.resolve(i1);8        checkpoints += 1;9        order += i1;10    }11    let outcome = "idle";12    if (checkpoints >= 3) {13        outcome = "drained";14    } else if (checkpoints === 2) {15        outcome = "checked";16    } else if (checkpoints === 1) {17        outcome = "primed";18    }19    console.log(`tasks=${count} checkpoints=${checkpoints} order=${order} status=${outcome}`);20}2122coordinate(seedTasks3);
    values this step1checkpoints1order
  5. outcome ← idle

    9    order += i;10}11let outcome→ idle = "idle";12if (checkpoints >= 3) {
  6. if (checkpoints >= 3)

    10}11let outcome = "idle";12if (checkpoints3 >= 3) {13    outcome = "drained";14} else if (checkpoints === 2) {
  7. console.log(`tasks=${count} checkpoints=${checkpoints} order=${order} …

    17        outcome = "primed";18    }19    console.log(`tasks=${count3} checkpoints=${checkpoints3} order=${order123} status=${outcomedrained}`);20}
    outputtasks=3 checkpoints=3 order=123 status=drained