What about having traits be “asynchronous aware”? It sounds like a Context is being passed already, could that not also determine which form the trait should use (sync/async)? Instead of fiddling within the standard library, this would make the process of asynchronous programming in Rust as simple as ‘async fn’ and using ‘.await;’ My concern with this approach is that the runtime may grow too much, however.
Edit (adtl): Given the current hack, Context, and knowing it will change should not be an issue as TFA made it sound like async situations will be handled in a different way than sync situations anyway. Thus allowing for the context aware traits to still be possible.