[typescript] 비동기 이터레이션과 await for...of 문을 사용한 병렬 처리 방법

Node.js나 브라우저에서 비동기 작업을 수행할 때, 여러 개의 비동기 작업을 병렬로 처리하고 싶을 때가 있습니다. 이 때 비동기 이터레이션과 await for...of 문을 사용하여 간단하게 병렬 처리를 구현할 수 있습니다.

비동기 이터레이션이란?

비동기 이터레이션은 Symbol.asyncIterator를 통해 비동기적으로 이터러블을 산출하는 것을 말합니다. 이터러블 객체는 for...of 루프나 ... 연산자를 통해 순회할 수 있습니다.

await for…of 문

await for...of 문은 이터러블을 비동기적으로 순회하면서 각 항목에 대해 await를 적용하는 문법입니다. 이를 사용하여 각 비동기 작업을 순차적으로 실행할 수 있습니다.

다음은 TypeScript로 구현한 예제 코드입니다.

async function processTasks(tasks: AsyncIterable<Promise<void>>) {
  for await (const task of tasks) {
    await task;
  }
}

위 예제 코드에서 processTasks 함수는 AsyncIterable을 받아 이를 순회하면서 각 Promise를 순차적으로 처리합니다.

병렬 처리 방법

await for...of 문을 사용하여 각 항목의 순차적인 처리를 수행할 수 있지만, 여러 작업을 병렬로 처리하고 싶을 때는 Promise.all 메서드를 사용할 수 있습니다. 다음은 Promise.all을 사용하여 이터러블의 모든 항목을 병렬로 처리하는 예제 코드입니다.

async function processTasksParallel(tasks: AsyncIterable<Promise<void>>) {
  await Promise.all(tasks);
}

위 예제 코드에서 Promise.all을 사용하여 모든 작업을 병렬로 실행합니다.

이러한 방법을 사용하여 비동기 이터레이션과 await for...of를 활용하면 간단하게 병렬 처리를 구현할 수 있습니다.

결론

이러한 비동기 이터레이션과 await for...of 문을 사용하여 간단하면서도 효율적으로 병렬 처리를 구현할 수 있습니다. 이를 통해 비동기 작업을 효율적으로 처리하는데 도움이 될 것입니다.

참고: