Chỉ cần cho 10 request đó chạy không phải là main
Để cho 10 request chạy song song mà không đợi nhau, bạn có thể sử dụng Kotlin coroutine cùng với async và await. Dưới đây là một ví dụ minh họa:
import kotlinx.coroutines.*
suspend fun main() {
val requests = List(10) { requestIndex ->
CoroutineScope(Dispatchers.Default).async {
// Thực hiện công việc của mỗi request
println("Start request $requestIndex")
delay((5 - requestIndex) * 1000L) // Giả lập thời gian xử lý của mỗi request
println("End request $requestIndex")
"Result of request $requestIndex"
}
}
val results = requests.awaitAll() // Đợi tất cả các request hoàn thành và lấy kết quả
println("All requests completed")
results.forEachIndexed { index, result ->
println("Request $index result: $result")
}
}
Trong ví dụ trên, chúng ta sử dụng một CoroutineScope để tạo ra 10 coroutine (mỗi coroutine đại diện cho một request). Mỗi coroutine được tạo ra bằng cách sử dụng async, cho phép chúng chạy song song. Trong coroutine, chúng ta giả lập thời gian xử lý của mỗi request bằng cách sử dụng hàm delay.
Sau đó, chúng ta gọi hàm awaitAll() để đợi cho tất cả các coroutine hoàn thành và lấy kết quả của chúng. Kết quả sẽ là một danh sách các kết quả từ mỗi request. Cuối cùng, chúng ta in ra kết quả của từng request.