public virtual void Stop()
{
ITransport transportToStop = null;
lock(reconnectMutex)
{
if(!started)
{
Tracer.Debug("FailoverTransport Already Stopped.");
return;
}
Tracer.Debug("FailoverTransport Stopped.");
started = false;
disposed = true;
connected = false;
foreach(BackupTransport t in backups)
{
t.Disposed = true;
}
backups.Clear();
if(ConnectedTransport != null)
{
transportToStop = connectedTransport.GetAndSet(null);
}
}
try
{
sleepMutex.WaitOne();
}
finally
{
sleepMutex.ReleaseMutex();
}
if(reconnectTask != null)
{
reconnectTask.Shutdown();
}
if(transportToStop != null)
{
transportToStop.Stop();
}
}