refactor AsyncTask