01 · TypeScript 동시성 풀
모델 테스트 대기 중모델 출력 및 관찰 결과: 사용할 수 없음; 모델 실행이 수행되지 않았습니다. 이러한 검사는 모델 출력이 아닌 제작된 설비입니다.
모델을 제공하라는 메시지가 표시됩니다.
비동기 함수 pool<T>(작업: Array<() => Promise<T>>, 제한: 숫자): Promise<PromiseSettledResult<T>[]>를 내보내는 pool.ts를 구현합니다. 작업을 느리게 시작하고, 최대 한도에서 동시에 실행하고, 입력 순서를 유지하고, 다른 작업을 중지하지 않고 약속 거부 및 동기식 발생을 해결합니다. 빈 입력은 []을 반환합니다. 빈 입력에 대해서도 RangeError를 사용하여 양수/정수가 아닌 제한을 거부합니다. 종속성을 사용하지 마십시오. pool.ts만 반환합니다. 제공된 수표를 수정하지 마십시오.입력/스타터 파일
// Input: delays [30, 5, 15] ms; limit 2.
// Implementation file: pool.ts테스트하기 전에 이 검사를 저장하세요.
// Save as pool.check.ts (Node 22+)
import assert from 'node:assert/strict';
import { pool } from './pool.ts';
let active = 0, peak = 0;
const tasks = [30, 5, 15].map((ms, i) => async () => {
active++; peak = Math.max(peak, active);
await new Promise(r => setTimeout(r, ms));
active--; return i;
});
assert.deepEqual(await pool(tasks, 2), [0,1,2].map(value => ({status:'fulfilled', value})));
assert.equal(peak, 2);
const rejected = await pool([() => { throw new Error('sync'); }, () => Promise.reject('async'), async () => 7], 1);
assert.deepEqual(rejected.map(r => r.status), ['rejected','rejected','fulfilled']);
assert.deepEqual(rejected[2], {status:'fulfilled', value:7});
assert.deepEqual(await pool([], 2), []);
for (const limit of [0, -1, 1.5, NaN, Infinity]) {
await assert.rejects(async () => pool([], limit), RangeError);
}
console.log('pool: all assertions passed');로컬에서 실행
npx --yes --package tsx@4.21.0 tsx pool.check.ts예상되는 행동/수용
결과는 [0, 1, 2]로 유지되고, 최대 동시성은 2이며, 거부해도 이후 작업이 중지되지 않습니다. 빈 입력 및 유효하지 않은 제한이 전달됩니다. 예상되는 마지막 줄: pool: 모든 어설션이 통과되었습니다. 30초 후에 중단된 실행을 중지하고 시간 초과를 기록합니다.