kotlinx.coroutines
라이브러리에서 launch
, async
등과 같은 모든 코 루틴 빌더는 CoroutineContext
매개 변수를 취하고 Job
유형의 추가 parent
매개 변수를 갖습니다. CoroutineContext
과 Job
의 차이점은 무엇입니까?kotlinx.coroutines의 CoroutineContext와 Job의 차이점은 무엇입니까?
4
A
답변
6
Job
은 coroutine 또는 수행되는 집계 작업의 일종을 나타냅니다. Job
은 CoroutineContext.Element
이며, 이는 coroutine 컨텍스트에 저장 될 수 있음을 의미합니다. CoroutineContext
은 다른 코 루틴 컨텍스트 요소 모음이며, 작업은 이러한 요소 중 하나입니다.
실제로 coroutine 컨텍스트는 coroutine 요소 키를 사용하여 요소에서 요소를 검색 할 수 있으므로 맵과 훨씬 비슷합니다. 예를 들어 유형의 값이 ctx
인 경우 ctx[Job]
표현식을 사용하여 해당 작업을 검색 할 수 있습니다. 자세한 내용은 coroutines design document 및 documentation for CoroutineContext의 해당 섹션에서 확인할 수 있습니다.
새 동시 루틴이 시작되면 전체 컨텍스트를 지정할 수 있습니다. 이 컨텍스트에 작업이 포함되어 있으면 해당 작업은 새 동시 루틴에 대해 부모이됩니다.
launch
과 같은 코 루틴 빌더에 대한 parent
매개 변수는 상위 작업 스펙을보다 명확하게 지정하는 데 편리합니다. launch
에 대한 문서는 명시 적으로 지정된 상위 작업이 컨텍스트에 지정된 작업보다 우선한다는 것을 강조 표시하므로 here입니다. 사용 방법에 대한 실제 예는 안내서의 this section에 나와 있습니다.