Entity Framework supporta query asincrone parallele?

Cosa succede quando iniziamo più query asincrone basate su Entity Framework e le eseguiamo in parallelo?

Sono eseguiti fisicamente in parallelo? Sono serializzati da Entity Framework? Questo non è supportato? Risulterà in un’eccezione?

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

Questo non è supportato secondo le specifiche della versione 6 .

Ciò dovrebbe generare un’eccezione DbConcurrencyException dice

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.

EF rileverà se lo sviluppatore tenta di eseguire due operazioni asincrone contemporaneamente e il lancio .

Da una pagina di codeplex del progetto :

Abilitare l’esecuzione asincrona delle operazioni del database è in realtà ortogonale per consentire l’esecuzione simultanea nello stesso contesto. Nel caso particolare di scenari server, l’utilizzo di accessi concorrenti potrebbe influire negativamente sulla scalabilità in quanto significherebbe che per elaborare una singola richiesta si verrebbe a girare un numero arbitrario di thread diversi. Tutti i thread competerebbero per risorse come la memoria con altri thread necessari per il server di altre richieste concorrenti.

Solo una nota, come menzionato da ken2k, non è consentito quando si utilizza Entity Framework con MS SQL Server. Tuttavia, se si utilizza Entity Framework con Oracle, questo è consentito.