Kotlin flow 병렬로 장기 작업 실행

2023. 11. 1. 18:51개발/Kotlin

작업 가져오기

  1. 특정 날짜에 결석한 학생 테이블에서 학생 정보 가져오기
  1. 물리학을 공부하는 학생 목록 가져오기

// 결석 학생 목록을 가져오는 suspension 함수를 정의합니다. 
stop  fun  getAbsentStudents (date: Date ) : List<Student> { 
    // 결석 학생 목록을 가져오기 위해 장기 실행 작업을 수행합니다 
    . // 결석 학생 목록을 반환합니다
 . } 

// 물리학을 공부하는 학생 목록을 가져오기 위해 일시 중지 함수를 정의합니다. 
suspens  fun  getPhysicsStudents () : List<Student> { 
    // 물리학을 공부하는 학생 목록을 가져오기 위해 장기 실행 작업을 수행합니다. 
    // 물리학 학생 목록을 반환합니다.
 } 

/ / 두 가지 정지 함수의 실행을 병렬화하는 흐름을 정의합니다. 
fun  getAbsentAndPhysicsStudents (date: Date ) : Flow<Pair<List<Student>, List<Student>>> = flow { 
    val absentStudents = async { getAbsentStudents(date) } 
    val PhysicsStudents = async { getPhysicsStudents() } 

    emit(absentStudents.await() toPhysicsStudents.await()) 
} 

// Flow의 결과를 수집합니다. 
fun  main ( ) { 
    runBlocking { 
        getAbsentAndPhysicsStudents(Date()) 
            .collect { (absentStudents, physicsStudents) -> 
                // 결석 및 물리학 학생 처리
             } 
    } 
}
  • runblocking은 해당 스레드가 실행될동안 다른거 다 멈추는 블록
  • 주의해서 사용하고, 코루틴에선 사용 못 함

작업 합치기

// 결석 학생 목록을 가져오는 suspension 함수를 정의합니다. 
stop  fun  getAbsentStudents (date: Date ) : List<Student> { 
    // 결석 학생 목록을 가져오기 위해 장기 실행 작업을 수행합니다 
    . // 결석 학생 목록을 반환합니다
 . } 

// 물리학을 공부하는 학생 목록을 가져오기 위해 일시 중지 함수를 정의합니다. 
suspens  fun  getPhysicsStudents () : List<Student> { 
    // 물리학을 공부하는 학생 목록을 가져오기 위해 장기 실행 작업을 수행합니다. 
    // 물리학 학생 목록을 반환합니다.
 } 

/ / zip 연산자를 사용하여 두 개의 정지 함수를 결합하는 흐름을 정의합니다. 
fun  getAbsentAndPhysicsStudents (date: Date ) : Flow<Pair<List<Student>, List<Student>>> = flow { 
    val absentStudents = flow {emit(getAbsentStudents( date)) } 
    valPhysicsStudents = flow {emit(getPhysicsStudents()) } 

    emit(absentStudents.zip(physicsStudents) { 없음, 물리학 -> 물리학 없음 }.single()) } 
// 

Flow 결과 수집 
fun  main () { 
    runBlocking { 
        getAbsentAndPhysicsStudents(Date()) 
            .collect { (absentStudents,PhysicsStudents) -> 
                // 결석 및 물리학 학생 처리
             } 
    } 
}

Uploaded by N2T

'개발 > Kotlin' 카테고리의 다른 글

When 조건문을 다양하게 사용하기  (0) 2023.11.30
Kotlin testable code  (0) 2023.11.30
to clean code (in Kotlin)  (0) 2023.10.23
Viewmodel / manage string res  (0) 2023.10.23
__**Using String Resources in a ViewModel**__  (0) 2023.08.08