【发布时间】:2019-09-17 18:07:01
【问题描述】:
我有一个 API 控制器操作,它执行大约 10 个单独的 linq 查询,这些查询用于形成我需要发送回客户端的摘要对象。这些 linq 查询都是在相同的数据上执行的。有没有一种方法可以在这种情况下使用 async/await 以便一个 linq 语句不必阻止其他语句运行?如果是这样,编写该 async/await 代码的最有效方法是什么?
总结一下我的问题:
- 在这种情况下我有异步/等待的用例吗?
- 如果是这样,与其创建一堆独立的任务,然后将它们全部填充到 Task.WhenAll() 中,有没有更有效的方法来编写它,以便我以后可以轻松添加更多 linq 查询? (没什么太疯狂的,只是干净且可维护)。
[HttpGet]
public IActionResult GetInventoryDetails(string id)
{
var inventory = _storeInventoryRepo.FindByCondition(s => s.Id = id)
var uniqueProductCount = inventory.Select(x => x.ProductId).Distinct().ToList().Count
var totalProductInventoryValue = inventory.Sum(x =>x.UnitPrice & x.TotalUnits)
var cheapestProduct = inventory.OrderBy(x => x.unitPrice).Select(x => x.ProductId).First();
var inventorydetails = new InventoryDetails
{
UniqueProductCount = uniqueProductCount,
TotalProductInventoryValue = totalProductInventoryValue,
CheapestProduct = cheapestProduct
}
Return Ok(inventoryDetails)
}
public class ProductInventory
{
public string Id { get; set; }
public string ProductId { get; set; }
public int UnitPrice { get; set; }
public double TotalUnits { get; set; }
}
如何使用 async/await 来允许 uniqueProductCost、totalProductInventoryValue 和最便宜的产品在不等待完成的情况下执行?
【问题讨论】:
-
你能添加一些代码吗?这些 LINQ 查询是针对数据库还是内存数据源?
-
@juunas 刚刚更新了它——这有帮助吗?
-
inventory的类型是什么? -
@juunas 检查我的更新
-
如果你想并行运行它们,那就是另外一个问题了。然后你需要多线程,而不是 async/await。
标签: c# .net asp.net-core async-await