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;