在我目前正在构建的系统中,我必须向提供计算服务的 API 发出网络请求。该服务需要一组复杂的参数,我必须从我的数据库中检索这些参数。目前我正在使用实体框架来检索这些实体,并且对于每个实体,我正在向这个 api 发出请求,检索结果并最后将所有结果保存到数据库中(一切都是同步完成的)
当实体集增加时,这种方法会出现扩展问题(因为我必须每 30 分钟对每个实体调用一次计算服务)。因此,我想以并行(或异步)的方式对实体进行数据库检索和 Web 请求,并对其他实体进行相同的操作。(不是为了减少数据加载时间,而是在等待 webrequest 完成的同时工作)
由于 EF 5 上下文不是线程安全的,我实现这一目标的最佳选择是什么?我应该编写特定的 SQL 查询、使用 LINQ 等吗?有没有人有类似方法的代码示例(并行 webrequest 的数据库检索)
编辑 添加一个小代码示例(非常简化)。假设对 web 服务的调用可能需要几秒钟,这将无法扩展。
foreach(entityId in entityIds)
{
var entity = _repository.Find(entityId);
_repository.LoadData(entity);
_validator.ValidateData(entity);
var result = _webservice.Call(entity);
entity.State = result.State;
}
_repository.SaveChanges();