随机执行下面的代码要么打印“DONE”,要么不打印,为什么会这样? 我怎么让它每次都去
console.log("DONE");
线。
const {Worker, isMainThread, parentPort} = require('node:worker_threads');
async function main() {
if (isMainThread) {
const worker = new Worker(__filename);
let resultResolve = null;
let resultPromise = new Promise(resolve => resultResolve = resolve);
worker.on('message', (msg) => resultResolve(msg));
let result = null;
while ((result = await resultPromise) != null) {
resultPromise = new Promise(resolve => resultResolve = resolve);
}
console.log("DONE");
} else {
for (let i = 0; i < 10000; i++) {
parentPort.postMessage(i);
}
parentPort.postMessage(null);
}
}
main();
我的猜测是,当 worker 退出并且主线程事件循环是否到达之前的
await resultPromise
行时,就会发生竞争。