This is my code:
var banner = context.Banners.ToListAsync()
var newsGroup = context.NewsGroups.ToListAsync()
await Task.WhenAll(banner, newsGroup);
If you are using IoC container for your Data Provider injection, consider to use "transient" or "PerWebRequest" type for your lifecycle.
For example: https://github.com/castleproject/Windsor/blob/master/docs/lifestyles.md
The exception explains clearly that there is only one asynchronous operation per context allowed at a time.
So, you either have to await
them one at a time as the error message suggests:
var banner = await context.Banners.ToListAsync();
var newsGroup = await context.NewsGroups.ToListAsync();
Or you can use multiple contexts:
var banner = context1.Banners.ToListAsync();
var newsGroup = context2.NewsGroups.ToListAsync();
await Task.WhenAll(banner, newsGroup);
If you use Unity for dependency injection with for example repository pattern you will get the following error using two or more contexts with create/update/delete:
The relationship between the two objects cannot be defined because they are attached to different ObjectContext objects.
This can be solved using PerRequestLifetimeManager
. More info here:
C# EF6 make multiple async calls to one context using Unity - Asp.Net Web Api
container.RegisterType<DbContext>(new PerRequestLifetimeManager());
container.RegisterType<ISupplierRepository, SupplierRepository>();
container.RegisterType<IContactRepository, ContactRepository>();