diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Reliability/SqlConfigurableRetryFactory.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Reliability/SqlConfigurableRetryFactory.cs index 81c0597ea9..16bae39008 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Reliability/SqlConfigurableRetryFactory.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Reliability/SqlConfigurableRetryFactory.cs @@ -37,6 +37,7 @@ public sealed class SqlRetryLogicOption /// public sealed class SqlConfigurableRetryFactory { + private readonly static object s_syncObject = new(); /// Default known transient error numbers. private static readonly HashSet s_defaultTransientErrors = new HashSet @@ -115,7 +116,12 @@ private static bool TransientErrorsCondition(Exception e, IEnumerable retri { foreach (SqlError item in ex.Errors) { - if (retriableConditions.Contains(item.Number)) + bool retriable; + lock (s_syncObject) + { + retriable = retriableConditions.Contains(item.Number); + } + if (retriable) { SqlClientEventSource.Log.TryTraceEvent(" Found a transient error: number = <{2}>, message = <{3}>", nameof(SqlConfigurableRetryFactory), MethodBase.GetCurrentMethod().Name, item.Number, item.Message); result = true;