Redesign and simplify async rpc