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 asyncawait. 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.