Refactor AsyncResult`s timeout handling