/// <summary> /// Disposes the current instance. /// Once disposed, it closes the connection and the library can't be used again. /// </summary> /// <param name="disposing">Whether the dispose method triggered it directly.</param> protected virtual void Dispose(bool disposing) { if (Disposed) { return; } if (disposing) { try { Connection?.RemoveAllListeners(); Channels?.CleanupChannels(); Push.Dispose(); } catch (Exception e) { Logger.Error("Error disposing Ably Realtime", e); } } Workflow.QueueCommand(DisposeCommand.Create().TriggeredBy($"AblyRealtime.Dispose({disposing}")); Disposed = true; }