export declare namespace MixAsyncGenerator {
    type AG<NextOut = unknown, Return = unknown, NextIn = unknown> = [
        NextOut,
        Return,
        NextIn
    ];
    type Gen<T extends AG, B extends boolean = boolean> = {
        name: string;
        runner: AsyncGenerator<T[0], T[1], T[2]>;
        /**替补元素/惰性元素
         * 意味着只有到不得不用的时候才会去使用
         */
        bench: B;
        /**当前的步伐 */
        currentStep: IteratorResult<T[0], T[1]> | undefined;
        /**偷跑的步数，默认是0
         * 偷跑意味着它始终会努力提供jumpGun个result
         * 替补元素也可以偷跑，但只有轮到它上场才能偷跑
         */
        jumpGun: number;
        /**缓存在队列中的步伐数 */
        inQueueSteps: number;
    };
    type Result<T extends AG> = {
        step: IteratorResult<T[0], T[1]>;
        from?: Gen<T>;
    };
    type ResultWithFrom<T extends AG, B extends boolean = boolean> = {
        step: IteratorResult<T[0], T[1]>;
        from: Gen<T, B>;
    };
    type Error<T extends AG> = {
        from: Gen<T>;
        reason: unknown;
    };
}
export declare class MixAsyncGenerator<T extends MixAsyncGenerator.AG = MixAsyncGenerator.AG> {
    private _allGenList;
    join(runner: AsyncGenerator<T[0], T[1], T[2]>, opts?: {
        name?: string;
        bench?: boolean;
        jumpGun?: number;
    }): MixAsyncGenerator.Gen<T, boolean>;
    private _join;
    remove(gen: MixAsyncGenerator.Gen<T>): boolean;
    private _enqueueGen;
    private _dequeueGen;
    /**正在执行中的任务，等待返回后就从这个集合中移除 */
    private _runnings;
    private _handleGen;
    /**候补队列 */
    private _benchGen;
    /**自由队列 */
    private _freeGen;
    private _genWaitter;
    /**入列
     * 这个函数与_handleGen是紧密关联的，是_handleGen的一部分
     */
    private _enqueueResult;
    /**出列 */
    private _dequeueResult;
    private _freeResult;
    private _benchResult;
    private _resultWaiter;
    readonly onError: import("evt/lib/types").Evt<MixAsyncGenerator.Error<T>>;
    next(): MixAsyncGenerator.ResultWithFrom<T, true> | MixAsyncGenerator.ResultWithFrom<T, false> | Promise<MixAsyncGenerator.Result<T>>;
    get isDone(): boolean;
    toAsyncIterator(): AsyncGenerator<T[0], void, unknown>;
    toPromise(): Promise<void>;
}
