Das ist mein Code:
var banner = context.Banners.ToListAsync()
var newsGroup = context.NewsGroups.ToListAsync()
await Task.WhenAll(banner, newsGroup);
Aber als ich die Funktion vom Controller aus anrief. Es zeigte Fehler
In diesem Kontext wurde eine zweite Operation gestartet, bevor eine vorherige asynchrone Operation abgeschlossen wurde. Verwenden Sie 'wait', um sicherzustellen, dass alle asynchronen Vorgänge abgeschlossen sind, bevor Sie eine andere Methode in diesem Kontext aufrufen. Es wird nicht garantiert, dass Instanzmitglieder threadsicher sind.
Bitte helfen Sie mir, dieses Problem zu lösen.
Antworten:
Die Ausnahme erklärt deutlich, dass jeweils nur eine asynchrone Operation pro Kontext zulässig ist.
Sie müssen
await
sie also entweder einzeln ausführen, wie in der Fehlermeldung angegeben:Oder Sie können mehrere Kontexte verwenden:
quelle
Wenn Sie einen IoC-Container für Ihre Datenprovider-Injektion verwenden, sollten Sie für Ihren Lebenszyklus den Typ "transient" oder "PerWebRequest" verwenden.
Zum Beispiel: https://github.com/castleproject/Windsor/blob/master/docs/lifestyles.md
quelle
Wenn Sie Unity für die Abhängigkeitsinjektion mit beispielsweise einem Repository-Muster verwenden, wird der folgende Fehler angezeigt, wenn zwei oder mehr Kontexte mit create / update / delete verwendet werden:
Dies kann mit gelöst werden
PerRequestLifetimeManager
. Mehr Infos hier:C # EF6 führt mit Unity - Asp.Net Web Api mehrere asynchrone Aufrufe an einen Kontext aus
quelle