Kotlin Flow와 병렬로 실행되는 장기 실행 작업
이 블로그에서는 Android에서 Kotlin Flow와 병렬로 긴 작업을 실행하는 방법에 대해 알아봅니다.
이 문서는 원래 amitshekhar.me에 게시되었습니다.
구현 부분에 다음 프로젝트를 사용할 것입니다. 이 프로젝트는 단순성을 위해 기본 MVVM 아키텍처를 따릅니다. 프로젝트 자체에서 이 블로그에 언급된 구현을 위한 전체 코드를 찾을 수 있습니다.
GitHub 프로젝트: Learn Kotlin Flow
긴 작업을 병렬로 실행하려면 Kotlin Flow의 연산자
zip
가 필요합니다. 따라서 Kotlin Flow의 연산자zip
가 무엇인지 이해해야 합니다.Kotlin Flow의 zip 연산자는 무엇인가요?
Zip Operator는 지정된 함수를 통해 두 개의 흐름 컬렉션의 배출을 함께 결합하고 이 함수의 결과를 기반으로 각 조합에 대해 단일 항목을 배출하는 연산자입니다.
예제 코드로 마블 다이어그램을 이해해 봅시다.
val flowOne = flowOf(1, 2, 3)
val flowTwo = flowOf("A", "B", "C")
flowOne.zip(flowTwo) { intValue, stringValue ->
"$intValue$stringValue"
}.collect {
println(it)
}
출력은 다음과 같습니다.
1A
2B
3C
병렬로 장기 실행 작업
Android의 실제 사용 사례: 두 작업을 병렬로 실행하고 두 작업이 완료되면 단일 콜백에서 두 작업의 결과를 원할 때.
코드 구현을 살펴보겠습니다.
두 개의 장기 실행 작업이 있다고 가정합니다.
장기 실행 작업 1:
private fun doLongRunningTaskOne(): Flow<String> {
return flow {
// your code for doing a long running task
// Added delay to simulate
delay(5000)
emit("One")
}
}
장기 실행 작업 2:
private fun doLongRunningTaskTwo(): Flow<String> {
return flow {
// your code for doing a long running task
// Added delay to simulate
delay(5000)
emit("Two")
}
}
이제 zip 연산자를 사용하여:
fun startLongRunningTask() {
viewModelScope.launch {
doLongRunningTaskOne()
.zip(doLongRunningTaskTwo()) { resultOne, resultTwo ->
return@zip resultOne + resultTwo
}
.flowOn(Dispatchers.Default)
.catch { e ->
// handle exception
}
.collect {
// result
}
}
}
출력은 다음과 같습니다.
OneTwo
여기에서는 zip 연산자를 사용했기 때문에 두 작업을 병렬로 실행하고 두 작업이 모두 완료되면 단일 콜백에서 두 작업의 결과를 제공합니다.
Zip 연산자를 사용하여 두 개의 흐름 컬렉션을 압축하면 두 작업이 병렬로 실행됩니다. 둘 다 완료되면 결과를 얻습니다. 이러한 방식으로 한 번에 두 흐름 수집의 결과를 얻습니다.
Kotlin Flow Zip 연산자의 장점:
이렇게 하면 작업을 병렬로 실행하기 위해 Kotlin에서 Flow의 Zip 연산자를 사용할 수 있습니다.
지금은 그게 다입니다.
감사
Amit Shekhar
다음에서 나와 연결할 수 있습니다.
Read all of my high-quality blogs here.
Reference
이 문제에 관하여(Kotlin Flow와 병렬로 실행되는 장기 실행 작업), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/amitiitbhu/long-running-tasks-in-parallel-with-kotlin-flow-1dgo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)