1.0.0 • Published 10 months ago
@esfx/async-conditionvariable v1.0.0
@esfx/async-conditionvariable
Provides AsyncConditionVariable
, an async coordination primitive.
Overview
Installation
npm i @esfx/async-conditionvariable
Usage
import { AsyncConditionVariable } from "@esfx/async-conditionvariable";
import { AsyncMutex } from "@esfx/async-mutex";
// create a mutex used to lock a resource
const m = new AsyncMutex();
// create a condition variable to maintain a list of waiters for a resource
const cv = new AsyncConditionVariable();
let tasks = getTasksToPerform(); // get some array of tasks to perform.
let ready = false;
let currentTask;
let taskResult;
async function worker() {
// pause worker until we can acquire a lock on 'm'.
const lk = await m.lock();
try {
// pause execution and release the lock on 'm' until we are ready.
await cv.wait(lk, () => ready);
while (ready) {
// pause execution and release the lock on 'm' until we are notified
await cv.wait(lk);
// We should now have the lock again for 'm', so do more work...
taskResult = await currentTask();
}
}
finally {
lk.unlock();
}
}
async function main() {
const pWorker = worker(); // start the worker
let task;
// get the next task to perform
while (task = tasks.shift()) {
// pause main until we can acquire a lock on 'm'.
let lk = await m.lock();
try {
currentTask = task;
}
finally {
lk.unlock();
}
cv.notifyOne();
// pause main until we can acquire a lock on 'm'.
lk = await m.lock();
try {
// we should now have the lock again for 'm', so process the result...
console.log(taskResult);
}
finally {
lk.unlock();
}
}
}
main().catch(e => console.error(e));
API
You can read more about the API here.
1.1.0-alpha.202307260322
10 months ago
1.1.0-alpha.202302091715
1 year ago
1.1.0-alpha.202306061406
11 months ago
1.1.0-alpha.202306061316
11 months ago
1.1.0-alpha.202306051228
11 months ago
1.1.0-alpha.202306080253
11 months ago
1.1.0-alpha.202302071935
1 year ago
1.1.0-alpha.202305082104
1 year ago
1.1.0-alpha.202211221509
1 year ago
1.1.0-alpha.202210252139
2 years ago
1.0.0
2 years ago
1.0.0-dev.7
2 years ago
1.0.0-pre.42
2 years ago
1.0.0-dev.8
2 years ago
1.0.0-pre.41
2 years ago
1.0.0-dev.5
2 years ago
1.0.0-pre.44
2 years ago
1.0.0-dev.6
2 years ago
1.0.0-pre.43
2 years ago
1.0.0-dev.4
2 years ago
1.0.0-prenative.0
2 years ago
1.0.0-prenative.1
2 years ago
1.0.0-dev.0
2 years ago
1.0.0-pre.40
2 years ago
1.0.0-pre.31
2 years ago
1.0.0-pre.33
2 years ago
1.0.0-pre.35
2 years ago
1.0.0-pre.34
2 years ago
1.0.0-pre.37
2 years ago
1.0.0-pre.36
2 years ago
1.0.0-pre.39
2 years ago
1.0.0-pre.38
2 years ago
1.1.0-alpha.202211291446
1 year ago
1.0.0-pre.30
3 years ago
1.0.0-pre.26
3 years ago
1.0.0-pre.25
3 years ago
1.0.0-pre.28
3 years ago
1.0.0-pre.29
3 years ago
1.0.0-pre.24
3 years ago
1.0.0-pre.23
3 years ago
1.0.0-pre.19
3 years ago
1.0.0-pre.17
3 years ago
1.0.0-pre.16
3 years ago
1.0.0-pre.13
5 years ago
1.0.0-pre.12
5 years ago
1.0.0-pre.11
5 years ago
1.0.0-pre.10
5 years ago
1.0.0-pre.9
5 years ago
1.0.0-pre.8
5 years ago
1.0.0-pre.7
5 years ago
1.0.0-pre.6
5 years ago