I'm trying to implement an ideal ratelimiting system with coroutines. Basically, I want to send requests to the server, and if it told me that I'm being ratelimited, requests should be delayed till the ratelimit is over. All this while also returning responses in time (we don't wait for all requests to finish, and provide the response to the caller whenever it comes). I already have an implementation but it's far from ideal. What's the best way to do this?