Here is complety alternative approach to your prob...
# coroutines
e
Here is complety alternative approach to your problem. This pattern is called "worker pool": 1. Create a channel for your requests:
val requests = Channel<Request>()
2. Launch
n
coroutines to process this channel:
Copy code
repeat(n) { 
    launch(context) {
        for (request in requests) 
            request.execute()
    }
}
Done. You have a guarantee now that at most
n
requests are processed concurrently.