SynchronizationContext.Post asynchronously queues a callback for execution on the context’s associated thread or execution context. Unlike Send, it returns without waiting; await uses this nonblocking path when a synchronization context is present. section 11.2
Returning after await
A single-thread context can run an async operation, wait through Task.Delay, and process the continuation through Post so the before and after messages use the same thread.
