목록전체 글 (177)
study record
Custom Asynchronous Sequences를 만드는 방법 첫번째 AsyncSequence와 AsyncIteratorProtocol 둘 다를 채택해서 구현 - makeAsyncIterator() 구현 - next async thorws() 구현 두번째 방법 -> AsyncStream - AsyncStream은 AsyncSequence를 채택한다. - AsyncSequence로부터 기본 행동들을 다 상속한다. - 싱글 클로저로부터 값들 produce - sequence의 끝에 값이나 nil을 리턴하는 클로저를 가지는 방법과, continuation을 활용하는 방법이 있다. 🧪 AsyncStream 안의 비동기 메소드 구현에 Task는 꼭 필요한가? let stream = AsyncStream { ..
AsyncSequence 알아가기 AsyncSequence는 비동기적으로 요소들을 생산할 수 있는 sequence를 설명하는 protocol이다. Swift의 Sequence와 비슷하나, 차이점은 다음 요소를 위해 await 키워드를 붙여야 한다는 것이다. 예제에서의 note URLSession.data(for:delegate)는 Data를 리턴. URLSession.AsyncBytes는 URL request로부터 비동기적으로 바이트들을 준다. HTTP 프로토콜은 서버가 partial requests에 대한 허용성을 지원하는지를 정의하게 한다. 만약 서버가 지원하면, 응답에 대한 byte range를 리턴하는 것을 요청할 수 있다. 한 번에 전체 응답을 받는 것 대신에. 그래서 하나의 파일을 얻고자 요청..
async: 메서드가 비동기로 작동할 것임을 보여준다. 이 메서드가 결과를 리턴할 때까지 실행을 멈춘다. await: 코드가 실행을 멈출 수 있음을 보여준다. async 메서드가 리턴할 때까지 기다린다. Task: 비동기 작업의 단위. 작업이 끝나거나 취소되는 것을 기다릴 수 있다. 🧪 completion handler → async 메서드로 변경해보기 // escaping closure func fetchStatus(completion: @escaping (String) -> Void) { URLSession.shared.dataTask( with: URL(string: "")! ) { data, response, error in guard let data = data else { return } co..
큐에 작업들을 넣기 전에, 어떤 큐를 사용할 것이고 사용하기 위한 목적을 결정해야 한다. Dispatch queues는 직렬적으로 또는 병렬적으로 작업을 실행할 수 있다. 게다가, 만약 큐에 특별한 목적을 가진다면 큐의 속성들을 설정할 수 있다. 아래의 글을 통해 어떻게 dispatch queue를 만들고 사용을 위한 설정을 할 수 있는지를 보여준다. Getting the Global Concurrent Dispatch Queues concurrent dispatch queue는 병렬적으로 실행할 다양한 작업들을 가지고 있을 때 유용하다. concurrent queue는 여전히 선입선출로 작동하는 큐이다. 다만, concurrent queue는 이전 작업이 끝나기 전에 추가적 작업이 빠져나올 수 있다. ..