Questo è il mio codice:
var banner = context.Banners.ToListAsync()
var newsGroup = context.NewsGroups.ToListAsync()
await Task.WhenAll(banner, newsGroup);
Ma quando ho chiamato la funzione dal controller. Ha mostrato errore
Una seconda operazione è iniziata in questo contesto prima che fosse completata una precedente operazione asincrona. Utilizzare 'attendi' per assicurarsi che tutte le operazioni asincrone siano state completate prima di chiamare un altro metodo in questo contesto. Non è garantito che tutti i membri di istanza siano thread-safe.
Per favore aiutami a risolvere questo problema.
L'eccezione spiega chiaramente che è consentita una sola operazione asincrona per contesto alla volta.
Quindi, devi await
uno alla volta come suggerisce il messaggio di errore:
var banner = await context.Banners.ToListAsync();
var newsGroup = await context.NewsGroups.ToListAsync();
Oppure puoi usare più contesti:
var banner = context1.Banners.ToListAsync();
var newsGroup = context2.NewsGroups.ToListAsync();
await Task.WhenAll(banner, newsGroup);
Se si utilizza il contenitore IoC per l'iniezione del proprio fornitore di dati, è consigliabile utilizzare il tipo "transiente" o "PerWebRequest" per il proprio ciclo di vita.
Ad esempio: https://github.com/castleproject/Windsor/blob/master/docs/lifestyles.md