【发布时间】:2019-10-20 00:32:32
【问题描述】:
我最近观察到两个开发人员之间的代码审查。
以下代码已提交:
public async Task<List<Thing>> GetThings()
{
try
{
var endpoint = $"{Settings.ThingEndpoint}/things";
var response = await HttpClient.GetAsync(endpoint);
return JsonConvert.DeserializeObject<List<Thing>>(await response.Content.ReadAsStringAsync());
}
catch (Exception e)
{
Log.Logger.Error(e.ToString());
return await Task.FromException<List<Thing>>(e);
}
}
收到以下评论的cmets:
绝对不需要返回 await Task.FromException>(e),这是你在处理非等待任务时要做的事情。 在这种情况下,catch 将捕获任何异常 var response = await HttpClient.GetAsync(endpoint);会扔。 您应该删除它并按原样捕获异常
我不完全明白为什么不使用 Task.FromException 在这种情况下,所以我有以下问题:
- 审稿人在说什么?
- 审稿人是否正确?
- 为什么不返回 await Task.FromException?
- 返回 await Task.FromException 的正确方案是什么?
【问题讨论】:
-
1.审阅者说你应该
throw;代替(登录后) 2:是的,审阅者是正确的。 3/4。Task.FromException用于库代码中的非异步/等待方法 -
“非 async/await 方法”我的意思是一个不写成
async Task的方法,就像Task,在里面你必须返回任务,比如Task.FromResult或Task.FromException. -
@LasseVågsætherKarlsen 谢谢。我不明白您为什么要在非异步方法中使用。以及为什么您不会在 asyc 方法中使用。请您再详细解释一下吗?