import { Resolvable } from '.';
export declare type LockHandler<T> = () => Resolvable<T>;
/**
 * A simple asynchronous lock that helps queueing operations.
 */
export declare function lock<T>(object: any, handler: LockHandler<T>): Promise<T>;
export declare type ParallelHandler<T> = (value: T, index: number, values: T[]) => Resolvable<void>;
/**
 * Run tasks in parallel, similar to `v.map` but not mean to transform.
 */
export declare function parallel<T>(values: T[], handler: ParallelHandler<T>, concurrency?: number): Promise<void>;
export declare type RaceTransformer<T, TResult> = (value: T, index: number, values: T[]) => Resolvable<TResult>;
/**
 * Race tasks and fulfill or reject as soon as one of them fulfills or rejects.
 */
export declare function race<T, TResult>(values: T[], transformer: RaceTransformer<T, TResult>): Promise<TResult>;
