Multi-async dans Entity Framework 6?

Ceci est mon code:

var banner = context.Banners.ToListAsync() var newsGroup = context.NewsGroups.ToListAsync() await Task.WhenAll(banner, newsGroup); 

Mais quand j’ai appelé la fonction du contrôleur. Il a montré une erreur

Une seconde opération a démarré sur ce contexte avant la fin d’une précédente opération asynchrone. Utilisez ‘wait’ pour vous assurer que toutes les opérations asynchrones sont terminées avant d’appeler une autre méthode dans ce contexte. Tous les membres d’instance ne sont pas garantis pour être thread-safe.

Aidez-moi à résoudre ce problème.

    L’exception explique clairement qu’il n’y a qu’une seule opération asynchrone par contexte autorisée à la fois.

    Donc, vous devez soit les await un par un, comme le suggère le message d’erreur:

     var banner = await context.Banners.ToListAsync(); var newsGroup = await context.NewsGroups.ToListAsync(); 

    Ou vous pouvez utiliser plusieurs contextes:

     var banner = context1.Banners.ToListAsync(); var newsGroup = context2.NewsGroups.ToListAsync(); await Task.WhenAll(banner, newsGroup); 

    Si vous utilisez un conteneur IoC pour l’injection de votre fournisseur de données, envisagez d’utiliser le type “transitoire” ou “PerWebRequest” pour votre cycle de vie.

    Par exemple: https://github.com/castleproject/Windsor/blob/master/docs/lifestyles.md

    Si vous utilisez Unity pour l’dependency injections avec, par exemple, un modèle de référentiel, vous obtiendrez l’erreur suivante en utilisant deux contextes ou plus avec create / update / delete:

    La relation entre les deux objects ne peut pas être définie car ils sont attachés à différents objects ObjectContext.

    Cela peut être résolu en utilisant PerRequestLifetimeManager . Plus d’infos ici:

    C # EF6 effectue plusieurs appels asynchrones vers un contexte en utilisant Unity – Asp.Net Web Api

     container.RegisterType(new PerRequestLifetimeManager()); container.RegisterType(); container.RegisterType();