코루틴 2

코루틴의 job 과 Deferred 의 차이

코투린의 비동기 실행을 하다보면 코루틴을 시작할때 launch 를 사용하거나 async 를 사용하거나 하는데 동작은 비슷하게 하지만 둘의 차이가 있다. launch - 새로운 코루틴을 시작한다. 결과값을 전달하지 않을 때 사용한다. async - 결과를 리턴할 수 있는 코루틴을 시작할때만 사용한다. 둘의 차이는 리턴값이 있냐 없냐의 차이다. 뭘 사용하는가에 따라 메소드나 완료 대기에 대한 대응이 달라진다. 이 이야기를 한건 launch 을 사용하면 job 을 반환하고 async 를 사용하면 Deferred 를 반환하기 때문이다. 그럼 다시 제목의 내용으로 돌아와서 job 과 Deferred 에 대해 알아보자. 사실은 job 과 Deferred 는 비슷하다. 그도 그럴게 Deferred 는 job을 확장하..

Android/Coroutine 2022.03.26

코루틴의 suspend 에 대해서

코루틴은 일시중단 일단 일시중단이 가능하다. launch 든 async 든 내부에 일시중단을 하는 동작이 있다면 코루틴은 잠시 멈춘다. 코루틴은 일을 협력(?) 한다는 느낌을 내포하고 있는데 여러개의 코루틴이 존재 할 수 있고 어떤 스레드에서 동작할지 명시 해준다면 각각의 코루틴을 잠시 멈췄다가 다른 코루틴을 실행시키고 그리고 일이 마무리되면 다른 코루틴과 같이 결과를 전달하거나 서로 순서를 옮겨다니며 동작한다. 예를 들면 val job3 = CoroutineScope(Dispahchers.IO).async{ //2. IO 스레드에서 작업3을 수행 (1..100).sortedByDescending{it} //5. 작업3이 완료된다. } val job1 = CoroutineScope(Dispahchers...

Android/Coroutine 2022.03.15