From b96de13414aeb22076e7540b4696ad4b72b0a55a Mon Sep 17 00:00:00 2001 From: Rhys Ickeringill Date: Wed, 7 Jan 2026 10:54:34 +1100 Subject: [PATCH] Simplify postgresql reconnection logic --- ...PostgreSQLNotificationConfigurationReloader.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/RAIC.Extensions.Configuration.EntityFrameworkCore.PostgreSQL/PostgreSQLNotificationConfigurationReloader.cs b/RAIC.Extensions.Configuration.EntityFrameworkCore.PostgreSQL/PostgreSQLNotificationConfigurationReloader.cs index 8953435..2938eaa 100644 --- a/RAIC.Extensions.Configuration.EntityFrameworkCore.PostgreSQL/PostgreSQLNotificationConfigurationReloader.cs +++ b/RAIC.Extensions.Configuration.EntityFrameworkCore.PostgreSQL/PostgreSQLNotificationConfigurationReloader.cs @@ -173,16 +173,21 @@ internal class PostgreSQLNotificationConfigurationReloader : Microsoft.Extension var backoffTask = Task.Delay(_options.InitialReconnectionDelay * (1 << i), stoppingToken); 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 - await backoffTask; // connect failed, wait for backoff time before trying again + continue; // Assume connection task has failed } - 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; }