in src/Transport/Failover/FailoverTransport.cs [127:180]
public bool Iterate()
{
bool result = false;
if (!parent.IsStarted)
{
return false;
}
bool buildBackup = true;
lock (parent.backupMutex)
{
if ((parent.connectedTransport.Value == null || parent.doRebalance || parent.priorityBackupAvailable) && !parent.disposed)
{
result = parent.DoConnect();
buildBackup = false;
}
}
if (buildBackup)
{
parent.BuildBackups();
if (parent.priorityBackup && !parent.connectedToPriority)
{
try
{
parent.DoDelay();
if (parent.reconnectTask == null)
{
return true;
}
parent.reconnectTask.Wakeup();
}
catch (ThreadInterruptedException)
{
Tracer.Debug("Reconnect task has been interrupted.");
}
}
}
else
{
try
{
if (parent.reconnectTask == null)
{
return true;
}
parent.reconnectTask.Wakeup();
}
catch (ThreadInterruptedException)
{
Tracer.Debug("Reconnect task has been interrupted.");
}
}
return result;
}