UNPKG

maxun-core

Version:

Core package for Maxun, responsible for data extraction

46 lines (45 loc) 1.62 kB
/** * Concurrency class for running concurrent tasks while managing a limited amount of resources. */ export default class Concurrency { /** * Maximum number of workers running in parallel. If set to `null`, there is no limit. */ maxConcurrency: number; /** * Number of currently active workers. */ activeWorkers: number; /** * Queue of jobs waiting to be completed. */ private jobQueue; /** * "Resolve" callbacks of the waitForCompletion() promises. */ private waiting; /** * Constructs a new instance of concurrency manager. * @param {number} maxConcurrency Maximum number of workers running in parallel. */ constructor(maxConcurrency: number); /** * Takes a waiting job out of the queue and runs it. */ private runNextJob; /** * Pass a job (a time-demanding async function) to the concurrency manager. \ * The time of the job's execution depends on the concurrency manager itself * (given a generous enough `maxConcurrency` value, it might be immediate, * but this is not guaranteed). * @param worker Async function to be executed (job to be processed). */ addJob(job: () => Promise<any>): void; /** * Waits until there is no running nor waiting job. \ * If the concurrency manager is idle at the time of calling this function, * it waits until at least one job is completed (can be "presubscribed"). * @returns Promise, resolved after there is no running/waiting worker. */ waitForCompletion(): Promise<void>; }