+ this.taskFunctionsUsage.clear()
+ }
+
+ /** @inheritdoc */
+ public async terminate (): Promise<void> {
+ const waitWorkerExit = new Promise<void>(resolve => {
+ this.registerOnceWorkerEventHandler('exit', () => {
+ resolve()
+ })
+ })
+ this.closeMessageChannel()
+ this.removeAllListeners()
+ switch (this.info.type) {
+ case WorkerTypes.thread:
+ await this.worker.terminate?.()
+ break
+ case WorkerTypes.cluster:
+ this.registerOnceWorkerEventHandler('disconnect', () => {
+ this.worker.kill?.()
+ })
+ this.worker.disconnect?.()
+ break
+ }
+ await waitWorkerExit
+ }
+
+ /** @inheritdoc */
+ public registerWorkerEventHandler (
+ event: string,
+ handler:
+ | OnlineHandler<Worker>
+ | MessageHandler<Worker>
+ | ErrorHandler<Worker>
+ | ExitHandler<Worker>
+ ): void {
+ this.worker.on(event, handler)
+ }
+
+ /** @inheritdoc */
+ public registerOnceWorkerEventHandler (
+ event: string,
+ handler:
+ | OnlineHandler<Worker>
+ | MessageHandler<Worker>
+ | ErrorHandler<Worker>
+ | ExitHandler<Worker>
+ ): void {
+ this.worker.once(event, handler)