private bool disposedValue = false; // To detect redundant calls

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    Robots?.Dispose();
                    UpdateWaitHandle?.Dispose(); // we're disposing whilst people have this accessed. Do we lock here ?
                    FetchWaitHandle?.Dispose();  // we're disposing whilst people have this accessed. Do we lock here ?
                    UpdateWaitHandle = null;
                    FetchWaitHandle  = null;
                }

                Robots        = null;
                disposedValue = true;
            }
        }