coroutine2 코루틴 withTimeoutOrNull과 Webclient 에 대해서 목적기존에 webClient를 이용해서 외부에 호출하는 메서드 A가 있었다. 이 메서드 A는 webClient에 timeout 1000ms를 걸어서 사용 중이었다. 그러다가 메서드 A의 로직을 그대로 사용하면서, timeout만 300ms로 줄이고 싶은 요구가 생겼다. 기존에 메서드 A를 다른 여러 코드에서 사용 중이었기 때문에 A 내부의 webClient의 timeout을 줄이는 건 위험도가 높아 보였다이를 해결하기 위해 새로운 코드를 작성할 때 메서드 A를 가져다 쓰고 그 상위에 withTimeoutNull이라는 함수를 사용했다 fun getData(): String? = runBlocking { withTimeoutOrNull(300) { delayWebClient.get() .. 2025. 4. 6. 코루틴 flow 컨텍스트 보존해야 하는 이유 의문왜 코루틴 flow를 사용할 때 콘테스트를 보존해야 할까?라는 의문이 들었다fun changeFlowContext() { runBlocking { flow { emit(1) withContext(Dispatchers.IO) { emit(2) } }.collect { println(it) } }} 위처럼 코드를 작성하고 실행시키면 " Flow invariant is violated: ~"라는 에러가 발생한다. withContext(Dispatchers.IO)를 통해 flow 내부에서 코루틴 콘텍스트를 변경해 줬기 때문이다에러 로그에서는 코루틴의 콘텍스트를 변경하려면 flowOn을 사.. 2025. 2. 2. 이전 1 다음