public SingleThreadedRelayQueueWorker(string name, Action <TItem> action, ThreadPriority threadPriority, bool markThreadAsBackground, ApartmentState?apartmentState, ILoggerWithStackTrace debugLogger) { _syncRunFlags = new object(); _syncUserActions = new object(); _items = new ConcurrentQueue <TItem>(); _name = name; _action = action ?? throw new ArgumentNullException(nameof(action)); _debugLogger = debugLogger ?? throw new ArgumentNullException(nameof(debugLogger)); _threadNotifyAboutQueueItemsCountChanged = new AutoResetEvent(false); _isRunning = true; _mustBeStopped = false; _workThread = new Thread(WorkingThreadStart) { IsBackground = markThreadAsBackground, Priority = threadPriority, Name = name }; if (apartmentState.HasValue) { _workThread.SetApartmentState(apartmentState.Value); } _workThread.Start(); }
public SingleThreadPriorityAsyncStarter(string name, ThreadPriority threadPriority, bool markThreadAsBackground, ApartmentState?apartmentState, ILoggerWithStackTrace debugLogger, int maxFlow, int queuesCount, bool isWaitAllTasksCompleteNeededOnStop) { _name = name; _debugLogger = debugLogger ?? throw new ArgumentNullException(nameof(debugLogger)); _maxFlow = maxFlow; _isWaitAllTasksCompleteNeededOnStop = isWaitAllTasksCompleteNeededOnStop; _flowCounter = new WaitableCounter(); _asyncActionQueueWorker = new SingleThreadedRelayMultiQueueWorker <Action>(_name, a => a(), threadPriority, markThreadAsBackground, apartmentState, debugLogger, queuesCount); }