public async Task<JobResult> GetDataFromWebAsync() { var nextJob = await _database.GetNextJobAsync(); var response = await _httpClient.GetAsync(nextJob.Uri); var pageContents = await response.Content.ReadAsStringAsync(); return await _database.SaveJobResultAsync(pageContents); }
这里要注意的主要事情是,虽然每个await-ed方法都被异步调用-并且在该调用时,控制权交还给了系统-该方法内部的流是线性的,并且由于异步而无需任何特殊处理。如果任何方法失败,则将按预期方式处理异常,在这种情况下,这意味着该方法的执行将被中止,并且异常将进入堆栈。