0
0

Simplify postgresql reconnection logic

This commit is contained in:
Rhys Ickeringill
2026-01-07 10:54:34 +11:00
parent db64055acb
commit b96de13414

View File

@@ -173,16 +173,21 @@ internal class PostgreSQLNotificationConfigurationReloader : Microsoft.Extension
var backoffTask = Task.Delay(_options.InitialReconnectionDelay * (1 << i), stoppingToken); var backoffTask = Task.Delay(_options.InitialReconnectionDelay * (1 << i), stoppingToken);
var completedTask = await Task.WhenAny(backoffTask, canConnectTask); var completedTask = await Task.WhenAny(backoffTask, canConnectTask);
if (ReferenceEquals(completedTask, canConnectTask)) // connect finished first if (ReferenceEquals(completedTask, backoffTask)) // backoff finished first
{ {
if (await canConnectTask) return true; // if can connect return immediately continue; // Assume connection task has failed
await backoffTask; // connect failed, wait for backoff time before trying again
} }
else // backoff finished first, wait for connection task result before decided whether to go around again or return immediately
// can connect task finished first
if (await canConnectTask) // if it finished with success
{ {
if (await canConnectTask) return true; await ListenForNotifications(stoppingToken);
return true;
} }
await backoffTask; // connect failed, wait for backoff time before trying again
} }
return false; return false;
} }