4 ms·
I've been using async Rust in production for years. The learning curve is a little higher than I'd like. But it works great and it does everything we need it to
by ekidd 4y ago
I've been using async Rust in production for years. The learning curve is a little higher than I'd like. But it works great and it does everything we need it to. For an open source example, see https://www.dbcrossbar.org/ https://www.dbcrossbar.org/
Many problems with async Rust involve people trying to get overly clever with lifetimes and zero-copy code. And if it's not either of those, it's people getting overly clever with async traits. So keep it simple!
Some tips:
1. Long-running async tasks should own their data, not borrow it. This will save you 80% of the pain right there.
2. Don't be afraid to allocate futures on the heap, and use "Box<dyn Future<Output=T>>" to hide the implementation.
3. If you must use traits with async members, use "async_trait".
4. Remember that futures can be cancelled at any "await" point. You can ignore this 99% of the time, as long as you use destructors to perform cleanup.
I would only recommend async Rust if you actually need very high-performance async code. Regular threaded Rust still works great for most things, as do languages like TypeScript. But if you actually need what async Rust offers, it's totally workable.