You've already forked Extensions.Configuration.EntityFrameworkCore
Simplify postgresql reconnection logic
This commit is contained in:
@@ -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
|
||||||
|
}
|
||||||
|
|
||||||
|
// can connect task finished first
|
||||||
|
if (await canConnectTask) // if it finished with success
|
||||||
|
{
|
||||||
|
await ListenForNotifications(stoppingToken);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
await backoffTask; // connect failed, wait for backoff time before trying again
|
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
|
|
||||||
{
|
|
||||||
if (await canConnectTask) return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user