C# 运行使用EF Core的并行异步任务时出现异常

C# 运行使用EF Core的并行异步任务时出现异常,c#,dependency-injection,asp.net-core,async-await,entity-framework-core,C#,Dependency Injection,Asp.net Core,Async Await,Entity Framework Core,我试图理解当db上下文被注入到类中时,如何处理使用实体框架的并行异步任务 我有一个显示大量总计的仪表板,我正在尝试运行并行返回这些总计的方法。目前,我有一些代码如下所示: public class KpiRepository : IKpiRepository { private readonly kpiContext _context; public KpiRepository(kpiContext context) { _context = conte

我试图理解当db上下文被注入到类中时,如何处理使用实体框架的并行异步任务

我有一个显示大量总计的仪表板,我正在尝试运行并行返回这些总计的方法。目前,我有一些代码如下所示:

public class KpiRepository : IKpiRepository
{
    private readonly kpiContext _context;

    public KpiRepository(kpiContext context)
    {
        _context = context;
    }

    public Task<int> NonCompliantTotalCountAsync()
    {
        return _context.vw_SearchData
            .CountAsync(x => x.NonComplianceDate < DateTime.Today || x.DateDueOutOfService < DateTime.Today);
    }

    public Task<int> NonCompliantInNextWeekCountAsync()
    {
        return NonCompliantBetweenNowAndDateCountAsync(DateTime.Today.AddDays(7));
    }

    public Task<int> NonCompliantInNextMonthCountAsync()
    {
        return NonCompliantBetweenNowAndDateCountAsync(DateTime.Today.AddMonths(1));
    }

    private Task<int> NonCompliantBetweenNowAndDateCountAsync(DateTime endDate)
    {
        return _context.vw_SearchData
            .CountAsync(x => (x.NonComplianceDate >= DateTime.Today && x.NonComplianceDate <= endDate)
                || (x.DateDueOutOfService >= DateTime.Today && x.DateDueOutOfService <= endDate));
    }

    var taskNonCompliantInNextWeekCountAsync = NonCompliantInNextWeekCountAsync();
    var taskNonCompliantInNextMonthCountAsync = NonCompliantInNextMonthCountAsync();  

    Task.WaitAll(
        taskNonCompliantInNextWeekCountAsync,
        taskNonCompliantInNextMonthCountAsync
    );

    data.NonCompliantInNextWeekCount= taskNonCompliantInNextWeekCountAsync.Result;
    data.NonCompliantInNextMonthCount= taskNonCompliantInNextMonthCountAsync.Result;
公共类KpiRepository:IKpiRepository
{
私有只读kpiContext\u上下文;
公共KpiRepository(kpiContext上下文)
{
_上下文=上下文;
}
公共任务不符合TotalCountAsync()
{
返回_context.vw_SearchData
.CountAsync(x=>x.NonComplianceDate.CountAsync(x=>(x.NonComplianceDate>=DateTime.Today&&x.NonComplianceDate=DateTime.Today&&x.DateDueOutOfService我添加了一个工厂类来创建上下文的新实例:

   public class KpiContextFactory: IKpiContextFactory
    {
        private string _connection = @"Server=.\SQL2008EXP;Database=kpiDb;Trusted_Connection=True;";

        public KpiContext GetNewContext()
        {
            var optionsBuilder = new DbContextOptionsBuilder<KpiContext>();
            optionsBuilder.UseSqlServer(_connection);

            return new KpiContext(optionsBuilder.Options);
        }
    }
公共类KpiContextFactory:IKpiContextFactory
{
私有字符串_connection=@“Server=。\SQL2008EXP;Database=kpiDb;Trusted_connection=True;”;
公共KpiContext GetNewContext()
{
var optionsBuilder=new DbContextOptionsBuilder();
optionsBuilder.UseSqlServer(_连接);
返回新的KpiContext(optionsBuilder.Options);
}
}
现在我只需注入该工厂而不是上下文本身,然后调用
\u kpiContextFactory.GetNewContext().[method]
而不是
\u context.[method]
。这似乎工作正常