split up perform method for single responsibility
Merge pull request #11 from celeen/perform_async

split up perform method for single responsibility