[Concurrency] Task-2
1. Task
- 비동기적인 일처리를 할 수 있는 하나의 일(work)의 단위.
- 작업의 생성한다음 바로 비동기적인 일처리를 시작한다.
-
Operation 파라미터에 해당하는 클로저를 전달하면서, 작업Task을 생성 및 클로저로 전달된 (비동기적인) 작업을 즉시 실행한다.
// 인스턴스 생성 Task { // 비동기적인 일(인스턴스를 생성하자마자 비동기 작업 실행한다) }
작업의 취소
-
변수에 담아서 관리가 가능해진다
task.cancel()
결과값 접근
-
작업은 Success 또는 Failure를 리턴
await task.value // 작업의 성공의 결과값에 접근 await task.result // 작업의 결과를 Result 타입으로 변환
작업은 각자 비동기적인 작업 처리를 진행하므로, 각 작업은 병렬적으로 일처리를 진행한다
작업은 현재 실행중인 컨텍스트의 메타데이터를 그대로 상속해서 사용한다
2. 작업의 특징
- Swift Concurrency에서 작업은 비동기적인 일처리를 위한 기본 단위이다.
- 작업은 동시성 코드를 실행하고 그 상태와 관련 데이터를 관리한다.
- 작업의 내부 코드는 순차적으로 동작한다. (멈췄다가 실행될 수도 있다)
- 컴파일 시점에 thread-safe하지 않은 코드 작성을 불가능하도록 하여 잠재적 불안정 가능성을 제거한다.
- 기존의 CGD는 대기열 방식인데 큐 자체가 우선 순위를 보유하기 때문에 반드시 우선순위로 실행되지 않을 수 있다.
- 기존의 CGD는 비동기 작업에 우선 순위를 지정할 수 있었지만 큐 내에서는 FIFO 방식이어서 기본적으로 대기열에 클로저가 등록된 순서대로 처리된다.
- Task는 새로운 비동기 방식으로, 우선 순위로 지정한 일을 먼저 끝낼 수 있다.
Task 에서 새로운 방식 도입
- Task 내부에서 실행되는 함수는 잠시 중단되었다가 다시 재개될 수 있다.(새로운 방식)
- async/awit 도입한다는 것은 어떤 함수가 실행되다가 중단되었다가 다시 실행될 수 있는 개념을 만들어 주는 것이다.
- 반드시 Task 안에서 실행을 시켰을 때만 중단이 가능하다.
Leave a comment