Core .Net SqlClient Data Provider erhöht Fehler von "Die Anforderung konnte nicht ausgeführt werden, da der Batch abgebrochen wird" random?

Ich habe .Net Core C # Anwendung, die eine gespeicherte Prozedur mit verschiedenen Parametern parallel aufruft. Von time zu time bekam ich die folgende exception.

Die Anforderung konnte nicht ausgeführt werden, da der Batch abgebrochen wird, dies kann durch Abbruch-Signal verursacht werden, das vom Client gesendet wird, oder eine andere Anforderung wird in derselben session ausgeführt, wodurch die session belegt wird.

 System.AggregateException: Ein oder mehrere Fehler sind aufgetreten.  (Die Anforderung konnte nicht ausgeführt werden, da der Batch abgebrochen wird, dies kann durch das vom Client gesendete Abbruch-Signal verursacht werden oder eine andere Anforderung wird in derselben session ausgeführt, wodurch die session belegt wird.) ---> System.Data.SqlClient. SqlException: Die Anforderung konnte nicht ausgeführt werden, da der Batch abgebrochen wird, dies kann durch das vom Client gesendete Abbruch-Signal verursacht werden oder eine andere Anforderung wird in derselben session ausgeführt, wodurch die session belegt wird.
    bei System.Data.SqlClient.SqlConnection.OnError (SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
    bei System.Data.SqlClient.SqlInternalConnection.OnError (SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
    bei System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
    bei System.Data.SqlClient.TdsParser.TryRun (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean & dataReady)
    bei System.Data.SqlClient.SqlDataReader.TryConsumeMetaData ()
    bei System.Data.SqlClient.SqlDataReader.get_MetaData ()
    bei System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
    bei System.Data.SqlClient.SqlCommand.CompleteAsyncExecuteReader ()
    bei System.Data.SqlClient.SqlCommand.InternalEndExecuteReader (IAsyncResult asyncResult, String endMethod)
    bei System.Data.SqlClient.SqlCommand.EndExecuteReaderInternal (IAsyncResult asyncResult)
    bei System.Data.SqlClient.SqlCommand.EndExecuteReader (IAsyncResult asyncResult)
    bei System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic (IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 Versprechen, Boolean erfordertSynchronisation)
 --- Ende der Stack-Trace von früheren Ort, wo exception ausgetriggers wurde ---
    bei System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()
    bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task-Task)
    bei System.Runtime.CompilerServices.TaskAwaiter`1.GetResult ()

Was hat die exception verursacht?

var options = new ParallelOptions { MaxDegreeOfParallelism = 4 }; Parallel.ForEach(items, options, t => { try { var result = DoWork(tA, t.Range).Result; } catch (Exception ex) { _logger.LogError(ex, $"{ex.ToString()}"); } }); public async Task<string> DoWork(A table, SqlXml range) { _context.Database.SetCommandTimeout(150000); using (var cmd = Conn.CreateCommand()) { cmd.CommandTimeout = 1200; cmd.CommandText = "storedProc"; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("@id", SqlDbType.SmallInt) { Value = table.Id }); cmd.Parameters.Add(new SqlParameter("@Range", SqlDbType.Xml) { Value = range }); var result = await cmd.ExecuteScalarAsync(); return result as string; } } 

DbContext ist nicht threadsicher und der Fehler sagt ausdrücklich aus

oder eine andere Anforderung läuft in der gleichen session, die die session beschäftigt macht

so dass ich vermute, dass der Versuch, einen gleichzeitigen Befehl auszustellen, das Problem verursacht. DbContext einen DbContext pro Thread. Sehen Sie diese Antwort für ein Parallel.ForEach Beispiel, wie man genau das macht.