비구조적 동시성의 문제
태스크를 동시에 실행할 수는 있지만, 태스크 간의 조율이 필요한 경우 어려움이 발생
- 태스크들을 서로 독립적인 존재로 취급하며, 그 사이의 관계나 의존성 무시함

4-1 그림 참고
구조적 동시성
프로그램의 논리적 구조를 반영해서 동시에 실행되는 태스크들을 체계적으로 관리
- 부모 태스크는 감독자의 역할
- 서브태스크 모니터링, 완료될 때까지 기다림, 문제 발생 시 개입
- 통합적으로 오류 처리와 취소를 다룰 수 있음
- 태스크의 부모-자식 생애주기를 엄격하게 보장함으로써 스레드 누수 방지
- 관측성을 높임
방법: StructuredTaskScope
- 같은 그룹에 속한 태스크들의 생애주기가 함께 묶여 동작하도록 보장
- fork(): 스포크 내에서 새로운 서브태스크를 생성하고 실행
- join(): 모든 서브태스크가 완료되거나 스코프가 취소될 때까지 기다린 후 반환
- close(): 스코프를 닫으며, 모든 서브태스크가 완료되었거나 취소되었음을 보장
동작 원리
StructuredTaskScope를 부모 컨테이너로 사용해서 그 안의 자식 서브태스크들을 관리함