¿Entity Framework admite consultas asíncronas paralelas?

¿Qué sucede cuando iniciamos múltiples consultas de async Entity Framework y las ejecutamos en paralelo?

¿Se ejecutan físicamente en paralelo? ¿Están serializados por Entity Framework? ¿Esto no es compatible? ¿Resulta en una excepción?

public async Task QueryDatabase() { using (var context = new MyDbContext()) { Task task1 = context.SomeTable1.ToListAsync(); Task task2 = context.SomeTable2.ToListAsync(); await Task.WhenAll(task1, task2); } } 

Esto no es compatible según las especificaciones de la versión 6 .

Esto debería arrojar una excepción DbConcurrencyException diciendo

Se inició una segunda operación en este contexto antes de que se completara una operación asincrónica anterior. Use ‘aguardar’ para asegurarse de que las operaciones asincrónicas se hayan completado antes de llamar a otro método en este contexto. No se garantiza que ningún miembro de instancia sea seguro para subprocesos.

EF detectará si el desarrollador intenta ejecutar dos operaciones asíncronas a la vez y lanzar .

Desde una página codeplex del proyecto :

La habilitación de la ejecución asíncrona de las operaciones de la base de datos es realmente ortogonal para permitir la ejecución simultánea en el mismo contexto. En el caso particular de los escenarios de servidor, el uso de acceso concurrente podría afectar negativamente a la escalabilidad, ya que significaría que para procesar una única solicitud estaría girando un número arbitrario de subprocesos diferentes. Todos los subprocesos competirían por recursos como la memoria con otros subprocesos necesarios para atender otras solicitudes simultáneas.

Solo una nota, como lo menciona ken2k, esto no está permitido cuando se usa Entity Framework con MS SQL Server. Sin embargo, si está utilizando Entity Framework con Oracle, esto está permitido.