분류 전체보기34 [Coroutine] 1-5 코루틴 컨텍스트와 디스패처 (1, 2) f 디스패처 종류들 코루틴이 실행될 스레드를 결정해주는 객체fun main() = runBlocking { launch { println("부모의 컨텍스트 : ${Thread.currentThread().name}") // 부모의 컨텍스트 : main } launch(Dispatchers.Default) { println("Default: ${Thread.currentThread().name}") // IO: DefaultDispatcher-worker-2 } launch(Dispatchers.IO) { println("IO: ${Thread.currentThread().name}") // IO:.. 2024. 6. 9. [Coroutine] 1-4 서스펜딩 함수 async 결과를 반환해야 하는 비동기 작업을 실행할 때 사용되는 코루틴 빌더await() 함수를 통해 나중에 결과를 검색할 수 있는 Deferred 객체를 반환결과를 받아야 한다면 async, 결과를 받지 않아도 된다면 launchawait는 코루틴이 결과를 준비할 때까지 기다렸다가(=suspension point) 가져옴launch는 예외 발생하는 즉시 코루틴을 종료시키고, async는 await호출 시 예외를 던진다suspend fun getRandom1() : Int { delay(1000L) return Random.nextInt(0,500)}suspend fun getRandom2() : Int { delay(1000L) return Random.nextInt(0,50.. 2024. 5. 6. [Coroutine] 취소와 타임아웃(2) - finally, withContext, withTimeout finally 예외 처리 구문인 try-catch 블록의 일부로 사용되는 키워드try 블록을 실행한 후에 항상 실행되는 블록을 정의할 때 사용launch에서 자원을 할당한 경우에 해제를 하려고 할때 사용예를들어, 파일이나 소켓같은 경우 항상 열고 닫아야하는데, 코루틴이 취소될때도 자원들은 정상적으로 해제가 되어야 한다.suspend 함수가 취소가 되었을때 내부적으로 JobCancellationException이 발생되는데, 이때 finally 로 넘어가 처리된다. 해당 Exception이 발생했을때, try 안에 있는 함수는 실행되지 않고, 바로 finally 안에 있는 함수가 실행된다 withContext(NonCancellable) withContext는 코루틴의 Context를 임시로.. 2024. 5. 6. [Coroutine] 취소와 타임아웃(1) - cancel cancel launch(코루틴 빌더)의 리턴값인 Job을 명시적으로 취소할 수 있는 메서드단, 코루틴을 취소하려면 suspension point가 있어야한다.// 1번 Casesuspend fun doOne() = coroutineScope { val job = launch { println("launch1") delay(1000L) println("1!") } delay(300L) job.cancel() println("2!")}fun main() = runBlocking { doOne() println("3!")}// 2번 casesuspend fun doCount() = coroutineScope { val job .. 2024. 5. 6. [Coroutine] 구조화된 동시성 suspend fun doOne() { launch { println("3!") }}fun main() = runBlocking { doOne()} X 이 코드는 컴파일에 실패합니다. Unresolved reference: launch코르틴 빌더(launch)는 반드시 코르틴 내에서 호출을 해야함suspend 키워드가 붙어진 함수는 suspension function(함수)일 뿐이지 코루틴은 아님suspension function내에서 다른 suspension function인 delay는 호출이 가능함코르틴 빌더(launch, runBlocking) 안에서 수신객체(receiver)는 코루틴이므로 함수 내에서 마치 자기 자신이 coroutine인 것처럼 코드를 구현할 수 .. 2024. 5. 6. [Coroutine] 스코프 빌더 - sleep, suspend sleep 해당 스레드를 잠시 쉬어가는 형태. (다른 코루틴이 사용할 수 있도록 양보하지 않음)Thread.sleep(500) : 0.5초동안 delay와 비슷하게 해당 스레드를 쉬게하지만 다른 코루틴이 사용할 수 있게 양보하지 않고 자기가 그대로 가지고 있다.운영체제에 내가 잠시 쉬겠다고 알리는 것 뿐. 다른 스레드에게 넘겨주지는 않음 suspend 코루틴 내에 호출된 함수를 분리할때 필요한 키워드suspend fun doThree() { delay(1000L) println("3!")}suspend fun doOne() { println("1!")}suspend fun doTwo() { delay(500L) println("2!")}fun main() = runBl.. 2024. 5. 4. 이전 1 2 3 4 ··· 6 다음