public IDisposable RegisterManagedThread(string owner, int threadId, string purpose)
            {
                var token = _inner.RegisterManagedThread(owner, threadId, purpose);

                _tokens.Add(token);
                return(token);
            }
        public OutboxMonitor(ILogger logger, IWorkerPool workers, int pollDelayMs)
        {
            Assert.ArgumentNotNull(logger, nameof(logger));
            Assert.ArgumentNotNull(workers, nameof(workers));
            Assert.IsInRange(pollDelayMs, nameof(pollDelayMs), 1000, int.MaxValue);

            _outboxes = new ConcurrentDictionary <long, IOutboxSender>();
            var strategy = new OutboxWorkerStrategy(this, pollDelayMs);

            _thread      = new IntervalWorkerThread(logger, strategy);
            _threadToken = workers.RegisterManagedThread("Outbox Module", _thread.ThreadId, "Outbox worker thread");
        }