Пример #1
0
 public WorkerToken(EventSourceModule module, IntervalWorkerThread worker, Guid id, IDisposable threadToken)
 {
     _worker      = worker;
     _id          = id;
     _threadToken = threadToken;
     _module      = module;
 }
Пример #2
0
        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");
        }
Пример #3
0
        public IDisposable RunEventSource(IEventSource source)
        {
            Assert.ArgumentNotNull(source, nameof(source));

            IEventSourceContext context = new EventSourceContext(_messageBus);
            var strategy = new EventSourceWorkStrategy(source, context);
            var thread   = new IntervalWorkerThread(_messageBus.Logger, strategy);

            if (!_threads.TryAdd(thread.Id, thread))
            {
                _logger.Error($"Could not add new event source ThreadId={thread.Id}. Maybe it has already been added?");
                thread.Dispose();
                return(null);
            }

            var threadToken = _messageBus.WorkerPool.RegisterManagedThread("Event Source Module", thread.ThreadId, "SourceModule thread " + thread.Id);
            var workerToken = new WorkerToken(this, thread, thread.Id, threadToken);

            _tokens.TryAdd(thread.Id, workerToken);
            thread.Start();
            return(workerToken);
        }