태스크를 사용하여 프로그램을 분리된 동시성 조각으로 분할할 수 있습니다. 태스크는 서로 격리되어 있으므로 태스크를 동시에 실행하는 것이 안전하지만 때로는 태스크 간에 일부 정보를 공유해야 합니다. Actor를 사용하면 동시 코드 간에 정보를 안전하게 공유할 수 있습니다. 클래스와 마찬가지로 Actor도 참조 유형이므로 Classes Are Reference Types의 값 유형과 참조 유형 비교는 클래스뿐만 아니라 액터도 적용됩니다. 클래스와 달리 액터는 한 번에 하나의 작업만 변경 가능한 상태에 액세스할 수 있으므로 여러 작업의 코드가 액터의 동일한 인스턴스와 상호 작용하는 것이 안전합니다. 예를 들어, 다음은 온도를 기록하는 액터입니다. actor TemperatureLogger { let label..
Tasks and Task Groups task는 프로그램의 일부(part)로 비동기적으로 실행될 수 있는 작업 단위입니다. 모든 비동기 코드는 일부 작업의 일부로 실행됩니다. 이전 섹션에서 설명한 async-let구문을 사용하면 하위 작업이 생성됩니다. 또한 태스크 그룹을 생성하고 해당 그룹에 하위 태스크를 추가하여 우선 순위 및 취소를 보다 효과적으로 제어하고 동적인 수의 태스크를 생성할 수 있습니다. 태스크는 계층 구조로 정렬됩니다. 태스크 그룹의 각 태스크에는 동일한 상위 태스크가 있으며 각 태스크에는 하위 태스크가 있을 수 있습니다. 태스크와 태스크 그룹 간의 명시적인 관계 때문에 이 접근 방식을 구조화된 동시성(structured concurrency)이라고 합니다. 작업 간의 명시적인 상위-..
Asynchronous Sequences 이전 섹션의 listPhotos(inGallery:) 함수는 배열의 모든 요소가 준비된 후 전체 배열을 한 번에 비동기식으로 반환합니다. 또 다른 접근 방식은 비동기 시퀀스(asynchronous sequence)를 사용하여 한 번에 하나의 컬렉션 요소를 대기하는 것입니다. 다음은 비동기 시퀀스를 반복(iterating)하는 방법입니다. import Foundation let handle = FileHandle.standardInput for try await line in handle.bytes.lines { print(line) } 위의 예는 일반적인 for-in 루프를 사용하는 대신 await 를for뒤에 씁니다. 비동기 함수 또는 메서드를 호출할 때와 마찬..
Defining and Calling Asynchronous Functions 비동기 함수 또는 비동기 메서드는 실행 도중 일시 중단될 수 있는 특수한 종류의 함수 또는 메서드입니다. 이는 완료될 때까지 실행되거나 오류를 발생시키거나 절대 return하지 않는 일반적인 동기화 함수 및 메서드와는 대조적입니다. 비동기 함수 또는 메서드는 여전히 이 세 가지 중 하나를 수행하지만, 무언가를 기다리고 있을 때 중간에 일시 중지할 수도 있습니다. 비동기 함수 또는 메서드의 바디 안에서 실행이 일시 중단될 수 있는 각 위치를 표시합니다. 함수 또는 메서드가 비동기임을 나타내려면 throws를 사용하여 던지기 함수를 표시하는 방법과 유사하게 매개 변수 뒤에 async 키워드를 씁니다. 함수 또는 메서드가 값을 반환..