async task implementation