Async Await
.Net provides a Task type that is used with async functions that invoke await and is
executed on the current synchronization context. If that is a thread-pool
context each task is run on a thread-pool thread. If a non thread-pool synchronization context is used, then
when the task blocks it is suspended, enqueued, and another task is dequeued by the same thread.
I suspect that the Rust async await functionality works the same way.