*/
export const DEFAULT_WORKER_CHOICE_STRATEGY_OPTIONS: WorkerChoiceStrategyOptions =
{
+ choiceRetries: 6,
runTime: { median: false },
waitTime: { median: false },
elu: { median: false }
return availableParallelism
}
+// /**
+// * Computes the retry delay in milliseconds using an exponential back off algorithm.
+// *
+// * @param retryNumber - The number of retries that have already been attempted
+// * @param maxDelayRatio - The maximum ratio of the delay that can be randomized
+// * @returns Delay in milliseconds
+// */
+// export const exponentialDelay = (
+// retryNumber = 0,
+// maxDelayRatio = 0.2
+// ): number => {
+// const delay = Math.pow(2, retryNumber) * 100
+// const randomSum = delay * maxDelayRatio * Math.random() // 0-(maxDelayRatio*100)% of the delay
+// return delay + randomSum
+// }
+
/**
* Computes the median of the given data set.
*
}
}
}
+
+/**
+ * Executes a function once at a time.
+ *
+ * @param fn - The function to execute.
+ * @param context - The context to bind the function to.
+ * @returns The function to execute.
+ */
+export const once = (
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ fn: (...args: any[]) => void,
+ context: unknown
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+): ((...args: any[]) => void) => {
+ let called = false
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ return function (...args: any[]): void {
+ if (!called) {
+ called = true
+ fn.apply(context, args)
+ called = false
+ }
+ }
+}