thắc mắc Xử lý async kotlin

everes121

Senior Member
#Kotlin_Backend_SpringBoot
Chào mọi người, mong mọi người giúp đỡ. Mình đang có 1 task cần xử lý bất đồng bộ. Mình có 1 list các item, với mỗi item sau khi foreach sẽ call 1 api để lấy dữ liệu về. Ví dụng list mình đang có 10 item thì cần call 10 lần, việc này khiến cho thời gian xử lý rất lâu. Mình muốn hỏi là kotlin có cách nào để xử lý vấn đề trên nhanh hơn không. Có cách nào cùng 1 lúc có thể get hết các item ra và call api cùng 1 lúc không. Mình cảm ơn ạ.
(Mình mới qua kotlin được 1 tuần khách hàng Nhật muốn code backend bằng kotlin :))))
 
đọc mà ko hiểu :v
Ví dụ for xong thì call, thì mỗi cái nó chạy riêng rẻ thì cái xong trước cái xong sau. Hay for xong mới call 1 lần ?
 
đọc mà ko hiểu :v
Ví dụ for xong thì call, thì mỗi cái nó chạy riêng rẻ thì cái xong trước cái xong sau. Hay for xong mới call 1 lần ?
Ví dụ em có 1 list Long là param của 1 hàm call api. Em đang dùng foreach để lấy ra từng số rồi truyền vào để call api, điểm yếu là phải chờ api call xong mới lấy được thằng tiếp theo để call tiếp. Em muốn làm sao để rút ngắn cái thời gian call này chẳng hạn như call 1 lần cả list
 
Ví dụ em có 1 list Long là param của 1 hàm call api. Em đang dùng foreach để lấy ra từng số rồi truyền vào để call api, điểm yếu là phải chờ api call xong mới lấy được thằng tiếp theo để call tiếp. Em muốn làm sao để rút ngắn cái thời gian call này chẳng hạn như call 1 lần
Thế nghiên cứu coroutine thôi, đơn giản.
 
Mình có giải pháp cơ bản như này cho bạn. Mỗi khi bạn cần call api thì cứ tạo 1 CoroutineScope rồi chạy với hàm launch{}. Bạn có thể vào https://play.kotlinlang.org/ để chạy thử.

Code:
import kotlinx.coroutines.*
fun main() {
    val list = MutableList<String>(10){
        (it+1).toString()
    }
    list.forEach{
        // Tạo 1 CoroutineScope với context là Dispatchers.IO và gọi api ở đây
        CoroutineScope(Dispatchers.IO).launch{
        println(it)

        // Call API
        }
    }
}
 
Mình có giải pháp cơ bản như này cho bạn. Mỗi khi bạn cần call api thì cứ tạo 1 CoroutineScope rồi chạy với hàm launch{}. Bạn có thể vào https://play.kotlinlang.org/ để chạy thử.

Code:
import kotlinx.coroutines.*
fun main() {
    val list = MutableList<String>(10){
        (it+1).toString()
    }
    list.forEach{
        // Tạo 1 CoroutineScope với context là Dispatchers.IO và gọi api ở đây
        CoroutineScope(Dispatchers.IO).launch{
        println(it)

        // Call API
        }
    }
}
Em cảm ơn bác để em thử ạ 🤗🤗🤗
 
Mình có giải pháp cơ bản như này cho bạn. Mỗi khi bạn cần call api thì cứ tạo 1 CoroutineScope rồi chạy với hàm launch{}. Bạn có thể vào https://play.kotlinlang.org/ để chạy thử.

Code:
import kotlinx.coroutines.*
fun main() {
    val list = MutableList<String>(10){
        (it+1).toString()
    }
    list.forEach{
        // Tạo 1 CoroutineScope với context là Dispatchers.IO và gọi api ở đây
        CoroutineScope(Dispatchers.IO).launch{
        println(it)

        // Call API
        }
    }
}
em cam on bac nhieu. em nghi day la cach giai quyet hay a. De mai em thu xem
 
Kotlin cũng là java chứ đâu. Tự implement thì threadpool không thì rxjava rxkotlin. Còn thích thuần kotlin thì coroutine của kotlin như mấy bác trên bảo ấy

via theNEXTvoz for iPhone
 
làm kiểu gì cũng vẫn là 10 lần request api, chả qua request tuần tự hay request cùng 1 lúc mà thôi
có 1 action mà request tới 10 phát lên api thì bạn nên xem lại document của api thì hơn
giờ có 1000 items thì bạn tạo 1000 requests lên api cùng lúc hả?
 
Dùng Async thì lâu thế kệ nó, muốn lâu hơn thì dùng worker thread rồi cho nó chạy thôi. Mà thấy kotlin có cái coroutine nghe vẻ hay ho nhưng chưa dùng, hàng xịn hơn Async lỗi thời nhiều. Mất công làm thì làm cái mới sau dùng nhiều
 
Back
Top