Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

EF 6 - Comment effectuer correctement des requêtes parallèles

Le problème est le suivant :

EF ne prend pas en charge le traitement de plusieurs requêtes via le même objet DbContext. Si votre deuxième requête asynchrone sur la même instance DbContext démarre avant la fin de la première requête (et c'est tout l'intérêt), vous recevrez un message d'erreur indiquant que votre requête est en cours de traitement par rapport à un DataReader ouvert.

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

Vous devrez modifier votre code en quelque chose comme ceci :

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);
}