post-custom-banner

코루틴은 기본적으로 반환값으로 job을 보내는 경우가 많다.
하지만 특정상황에서 코루틴 내부에서 일어난 작업의 값을 반환하고싶거나 특정 동작이 일어난 후 진행이 되게끔 동기적으로 처리하고 싶은 경우도 생길것이다.

기존에는 async,await을 이용하면서 Deferred값으로 결과를 감싼후 진행하였지만
withContext를 이용하면 이 작업을 줄일 수 있다.
결과가 리턴될 때 까지 기다립니다.

특징은 두가지가 있다.

  • withContext 블록의 마지막 줄의 값을 반환한다.
  • withContext의 블록이 끝나기 전까지 해당 코루틴은 일시정지된다.

추가적인 기능은 코루틴의 Context를 바꾸고 싶을때 사용할 수 있습니다.


suspend fun checkPassword(password: String): BillingPassword? {
        val passwordResponse = withContext(viewModelScope.coroutineContext) {
            val request = BillingPasswordRequest(
                password
            )
            repository.checkPassword(request)
        }
        return passwordResponse
    }

위 상황은 다음과 같습니다.
아임포트 빌링을 완성을 하는 과정에서 checkPassword를 실행시켜야합니다.
파라미터로 BillingPasswordRequest 타입으로 된 request를 받아야 하고 결과값으로 BillingPassword타입으로된 객체를 반환해야 합니다.

checkPassword의 응답을 기다려야하기때문에 withContext를 사용했습니다.
repository에서 checkPassword작업이 끝나기 전까지 해당 스레드는 일시정지상태가 되고 작업이 완료되면 결과값을 반환해줍니다.

profile
러닝커브를 따라서 등반중입니다.
post-custom-banner

0개의 댓글