Hallo Rolf,
eine race condition kann ich eigentlich ausschliessen. Ich habe mit einer Einstellung getestet, die jeweils nur ein Sub Web Worker erstellt. Und ein nicht unterstütztes feature kann es nicht sein, da Firefox bei Wiederholungen an unterschiedlichen Stellen aufhört. Das heisst, manchmal schafft er 80 Dateien, beim nächsten Versuch schafft er nur 60 Dateien usw. Das ist ja gerade das wunderliche. Ich werde mich heute Abend noch einmal dransetzen und debugging fortsetzen.
Das Orchestrieren erfolgt in einem Object im Main Web Worker. Als Beispiel:
const fileObject = {
"file1"; {"status":"waiting", "url": "..."},
"file2"; {"status":"waiting", "url": "..."},
"file3"; {"status":"waiting", "url": "..."},
}
Main Worker prüft, ob noch files mit status "waiting" bestehen. Wenn ja, wird ein Sub Web Worker für das File gestartet und im Object der Status auf "processing" gesetzt, also so:
const fileObject = {
"file1"; {"status":"processing", "url": "..."},
"file2"; {"status":"waiting", "url": "..."},
"file3"; {"status":"waiting", "url": "..."},
}
Wenn der Sub Web Worker fertig ist und sich mit dem Ergebnis und der fileID meldet, wird der status auf "finish" gesetzt:
const fileObject = {
"file1"; {"status":"finished", "url": "..."},
"file2"; {"status":"waiting", "url": "..."},
"file3"; {"status":"waiting", "url": "..."},
}
Und nach dem setzten von finished fängt es von vorne an, dass der Main Web Worker prüft, ob es noch files mit "waiting" gibt. Sofern alle Einträge den Status "finished" haben, sendet der Main Web Worker sein Ergebnis zurück an den Main Thread.
Eigentlich ist das ziemlich robust umgesetzt. Ich werde jetzt wohl tatsächlich in den Sub Web Worker console.log Einträge anbringen um zu verstehen, ob der Worker für eine fileID gestartet und wenn ja, wie weit er gekommen ist.
Mal schauen, ob ich die Ursache finde.
Gruss