在我的ASP.NET核心API中,我需要对3个不同的存储库进行3次单独的调用,以便收集做出决策所需的所有数据。
我想尽可能地节省时间,以便加快速度。使用常规调用方法或并行调用方法完成所有3个调用所需的时间有什么区别吗?
常规方式为:
var customer = await _customersRepository.GetCustomer(customerId);
var balance = await _salesRepository.GetCustomerBalance(customerId);
var product = await _productsRepository.GetProduct(productId);
我以前没有使用过并行方法,但我认为它是这样的:
Customer customer;
Balance balance;
Product product;
Parallel.Invoke(
() =>
{
customer = await _customerRepository.GetCustomer(customerId);
},
() =>
{
balance = await _salesRepository.GetCustomerBalance(customerId);
},
() =>
{
product = await _productRepository.GetProduct(productid);
});
同样,我主要关心的是尽快完成所有三个存储库/数据库调用,以便获得做出决策所需的所有数据。
1.运行并行任务是否有利于保存时间?
1.使用并行调用方法还有其他好处或问题吗?
2条答案
按热度按时间jv4diomz1#
如果您可以构造一个对数据库的 * 单个 * 查询,一次检索所有数据,那就更好了。
但如果必须执行多个并发数据库调用,则可以使用
Task.WhenAll
(注意:而不是Parallel
)。您必须确保您的仓库使用 * 不同 * 的数据库上下文,因为EF上下文不支持并发:icnyk63a2#
根据存储库操作所花费的时间,并行执行这些操作可能会有好处。但是,DbContext不是线程安全的,因此请确保为每次执行检索单独的示例(假设它们从DbContext读取)。另外,请查看此线程以了解有关EF Core并行执行的更多信息:What is the best practice in EF Core for using parallel async calls with an Injected DbContext?