public WorkerToken(EventSourceModule module, IntervalWorkerThread worker, Guid id, IDisposable threadToken) { _worker = worker; _id = id; _threadToken = threadToken; _module = module; }
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"); }
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); }