sql >> Base de Datos >  >> RDS >> Sqlserver

EF 6 - Cómo realizar correctamente consultas paralelas

El problema es este:

EF no admite el procesamiento de varias solicitudes a través del mismo objeto DbContext. Si su segunda solicitud asíncrona en la misma instancia de DbContext comienza antes de que finalice la primera solicitud (y ese es el objetivo), obtendrá un mensaje de error que indica que su solicitud se está procesando en un DataReader abierto.

Fuente:https://visualstudiomagazine.com/articles/2014/04/01/async-processing.aspx

Deberá modificar su código a algo como esto:

async Task<List<E1Entity>> GetE1Data()
{
    using(var MyCtx = new MyCtx())
    {
         return await MyCtx.E1.Where(bla bla bla).ToListAsync();
    }
}

async Task<List<E2Entity>> GetE2Data()
{
    using(var MyCtx = new MyCtx())
    {
         return await MyCtx.E2.Where(bla bla bla).ToListAsync();
    }
}

async Task DoSomething()
{
    var t1 = GetE1Data();
    var t2 = GetE2Data();
    await Task.WhenAll(t1,t2);
    DoSomething(t1.Result, t2.Result);
}