A lot of the time it's not about options. It's about not messing up the async pattern.
If you have something that either:
- requires a lot of CPU time
- requires to run permanently, independently to the caller's future polling. Then you can spawn it on a global tokio executor.
If not, just use future polling tricks like the futures::join!() macro or a stream with .buffered(). It won't be slower. The bottle neck is IO. Not the program.
Personally I even try to replace the heavy reqwest library with ureq + blocking, and it works perfectly and compiles faster (you can see that in the api_bindium crate)