I used Observer design pattern and Adaptor design pattern to deal with asynchronous problem. It works for me. Maybe you can try it out....
Separate names with a comma.