channel-ts
Version:
Channels implemented in Typescript using async/await
39 lines (38 loc) • 1.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const _1 = require(".");
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
const main = async () => {
const mutex = new _1.Mutex();
const task1 = async () => {
console.log("task 1: going to start");
const guard = await mutex.acquire();
console.log("task 1: mutex acquired");
await delay(2000);
console.log("task 1: finished");
guard.release();
console.log("task 1: mutex released");
};
const task2 = async () => {
await delay(200);
console.log("task 2: going to start");
const guard = await mutex.acquire();
console.log("task 2: mutex acquired");
await delay(1500);
console.log("task 2: finished");
guard.release();
console.log("task 2: mutex released");
};
const task3 = async () => {
await delay(400);
console.log("task 3: going to start");
const guard = await mutex.acquire();
console.log("task 3: mutex acquired");
await delay(1800);
console.log("task 3: finished");
guard.release();
console.log("task 3: mutex released");
};
await Promise.all([task1(), task2(), task3()]);
};
main();