티스토리 뷰

안드로이드

withContext, async 차이

유녕2 2023. 3. 29. 18:59

withContext, async 차이

 
 
suspend 코루틴 함수를 정의하는 키워드.
기존 스레드 작업과 코루틴, 비동기 작업 순차진행
 
Suspend - resume 
suspend 함수가 호출될 때, 기존 진행 코드는 멈춘다.(suspend)
그리고 이 함수가 끝날 때 기존 진행 코드가 실행된다.(resume) 
 
CoroutineContext가 지정한 쓰레드에서 동작.
 
IO Thread 함수 실행 ? 
 
withContext : CoroutineContext를 실행 인자와 suspend 함수를 인자로 받고 그 CoroutineContext에서 그 suspend 함수를 실행시킵니다.
그리고 부모 CoroutineContext는 이 전체 실행이 끝나고 결과를 반환할 때까지 기다립니다.?
CoroutineContext로 변경하는 방법. Main Thread에서 실행한 코루틴을 다른 쓰레드로 돌아다니며 실행할 방법이 없겠죠.
 
 
  1. withContext(context) : 현재 코루틴의 컨텍스트를 전환. 주어진 블록이 실행될 때 코루틴은 이전 컨텍스트로 다시 전환.
  2. Async(context) : 주어진 컨텍스트에서 새 코루틴을 시작하고 반환 된 Deferred 작업에서 .awit()을 호출하면 호출 된 코루틴을 일시중단하고 생성 된 코루틴 내부에서 실행되는 블록이 반환 될 때 다시 시작됩니다
 
 
 
 
withContext 블록의 마지막 줄의 값이 반환 값이 된다.
withContext가 끝나기 전까지 해당 코루틴은 일시정지 된다.
->이러한 특성으로 인해 withContext를 이용하면 비동기 작업을 순차코드처럼 작성할 수 있게 된다. 
 
비동기 작업을 하는 이유 자체가 순차적인 처리를 했을때 연산 시간을 줄이기 위함인데, 순차적으로 처리하도록 만들어버리면 비동기 작업의 장점이 사라진다.
withContext를 이용하면 결과값 수신이 필요한 코드의 순차화가 가능하다.
 
 
  1. suspend fun 키워드
  2. withContext + Dispatchers.IO
  3. uiScope
 
 
 
Suspend
코루틴 함수를 정의하는 키워드. 
 
 
동기(동시에 일어나는) : 요청과 그 결과가 동시에 일어난다.
비동기(동시에 일어나지 않는) : 요청과 결과가 동시에 일어나지 않는다.
 
 
비동기 작업을 순차적으로 진행
 
코루틴을 시작한 CoroutineContext가 지정한 쓰레드에서 동작.

'안드로이드' 카테고리의 다른 글

Android) WorkManager Sending Data / Receiver Data  (0) 2023.08.07
call vs Response 차이  (0) 2023.07.31
MVVM 디자인패턴  (0) 2023.03.29
어플리케이션 클래스  (0) 2022.04.06
안드로이드 inflater  (0) 2020.01.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함