.net core webapi使用了多线程来操作数据库,等待任务全部执行完成就会报错,有好的解决方案吗?(语言-c#)

img

var type =Task.Run(()=> {
return _db.V_CAR_SUB_CAR_TYPE.Select(s => new { s.TYPE_EN, s.SUB_CAR_ID, s.SUB_CAR_EN, s.BRD_EN, s.OEM_EN, s.SEG, s.SUB_SEG_EN, s.CAR_EN, s.DOM_IMP_EN, s.BODY_EN, s.SERS_EN, s.STYLE_EN, s.FUEL_TYPE_EN, s.FUEL_CLS_EN, s.FUEL_CLS, s.MID_SEG_EN, s.CAR_SERS_EN, s.SEG_EN, }).ToList();
});
var sub_car = Task.Run(() =>
{
return _db.V_CAR_SUB_CAR.Select(s => new { s.SUB_CAR_ID, s.SUB_CAR_EN, s.BRD_EN, s.OEM_EN, s.SEG, s.SUB_SEG_EN, s.CAR_EN, s.DOM_IMP_EN, s.BODY_EN, s.SERS_EN, s.STYLE_EN, s.FUEL_TYPE_EN, s.FUEL_CLS_EN, s.FUEL_CLS, s.MID_SEG_EN, s.CAR_SERS_EN, s.SEG_EN }).ToList();
});
Task.WaitAll(type, sub_car);

EF和多线程不搭,那不是线程安全的,所以你需要从两个不同的scope里获取(我假设你用的是scope生存期)

  var serviceScope1 = _serviceProvider.CreateScope()
var serviceScope2  = _serviceProvider.CreateScope()
 var _db1=serviceSope1.GetService<xxxDB>()
 var _db2=serviceSope1.GetService<xxxDB>()