public async ReusableTask <bool> RemoveTrackerAsync(ITracker tracker) { if (tracker == null) { throw new ArgumentNullException(nameof(tracker)); } if (Private) { throw new InvalidOperationException("Cannot remove trackers from a private torrent."); } await ClientEngine.MainLoop; var clone = new List <TrackerTier> (Tiers); var tier = Tiers.FirstOrDefault(t => t.Trackers.Contains(tracker)); if (tier == null) { return(false); } tier.AnnounceComplete -= AnnounceComplete; tier.ScrapeComplete -= ScrapeComplete; var index = clone.IndexOf(tier); if (tier.Trackers.Count == 1) { clone.RemoveAt(index); } else { clone[index] = tier.Without(tracker); } Tiers = clone.AsReadOnly(); return(true); }