use proxy object and interface to simplify async wrapping of methods.