我有一个 Web API 2 端点,我想在检索和验证用户的同时异步执行操作。如果这个用户不存在,我想像这样返回 404 Not Found:
public async Task<IHttpActionResult> Get()
{
var getCatTask = GetCatAsync();
var user = await GetUserAsync();
if(user == null)
{
return NotFound();
}
var cat = await getCatTask;
return Ok(cat);
}
如果用户等于 null 并且方法在不等待 getCatTask 的情况下返回,这是否会给我带来潜在的问题,或者这被认为是一种不好的做法?
最佳答案
这并不是真的坏,因为在这种情况下您只是读取数据而您将忽略结果。对于每个虚假请求,您都会产生额外的 GetCatAsync
操作成本(这种情况可能不会经常发生)。
如果可能,考虑使 GetCatAsync
可取消,然后您至少可以在返回前开始清理:
public async Task<IHttpActionResult> Get()
{
var cts = new CancellationTokenSource();
var getCatTask = GetCatAsync(cts.Token);
var user = await GetUserAsync();
if (user == null)
{
cts.Cancel();
return NotFound();
}
var cat = await getCatTask;
return Ok(cat);
}
关于c# - 在异步操作完成之前从方法返回的坏习惯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36423754/