public MutexQueue([NotNull] TQueue queue, [NotNull] ProducerConsumerQueueOptions <T> options, CancellationToken token = default(CancellationToken)) : base(options, token) { bool createdNew; string name = Name.ToNullIfEmpty()?.LeftMax(Win32.MAX_PATH); if (name == null) { _mutex = new Mutex(false, null, out createdNew); } else { try { _mutex = Mutex.OpenExisting(name); createdNew = false; } catch (WaitHandleCannotBeOpenedException) { _mutex = new Mutex(false, name, out createdNew); } } IsOwner = createdNew; _queue = new QueueAdapter <TQueue, T>(queue); _allWorkDone = new ManualResetEvent(false); new Thread(Consume) { IsBackground = IsBackground, Priority = Priority }.Start(); }
public DataFlowQueue([NotNull] ProducerConsumerQueueOptions <T> options, CancellationToken token = default(CancellationToken)) : base(options, token) { _workCompletedEventSlim = new ManualResetEventSlim(false); // Define the mesh. _queue = new BufferBlock <T>(new DataflowBlockOptions { CancellationToken = Token }); _processor = new ActionBlock <T>(e => { ScheduledCallback?.Invoke(e); Run(e); }, new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = Threads, CancellationToken = Token }); _link = _queue.LinkTo(_processor, new DataflowLinkOptions { PropagateCompletion = true }); Task.Run(Consume).ConfigureAwait(); }
public BlockingCollectionQueue([NotNull] ProducerConsumerQueueOptions <T> options, CancellationToken token = default(CancellationToken)) : base(options, token) { _queue = new BlockingCollection <T>(); _workStartedEvent = new AutoResetEvent(false); _countdown = new CountdownEvent(1); _workers = new Thread[Threads]; }
public WaitAndPulseQueue([NotNull] TQueue queue, [NotNull] ProducerConsumerQueueOptions <T> options, CancellationToken token = default(CancellationToken)) : base(options, token) { _queue = new QueueAdapter <TQueue, T>(queue); _workStartedEvent = new AutoResetEvent(false); _countdown = new CountdownEvent(1); _workers = new Thread[Threads]; }
public TaskGroupQueue([NotNull] TQueue queue, [NotNull] ProducerConsumerQueueOptions <T> options, CancellationToken token = default(CancellationToken)) : base(options, token) { _queue = new QueueAdapter <TQueue, T>(queue); _countdown = new CountdownEvent(1); new Thread(Consume) { IsBackground = IsBackground, Priority = Priority }.Start(); }
public SemaphoreSlimQueue([NotNull] TQueue queue, [NotNull] ProducerConsumerQueueOptions <T> options, CancellationToken token = default(CancellationToken)) : base(options, token) { _queue = new QueueAdapter <TQueue, T>(queue); _allWorkDone = new ManualResetEvent(false); _semaphore = new SemaphoreSlim(Threads); new Thread(Consume) { IsBackground = IsBackground, Priority = Priority }.Start(); }
public SemaphoreQueue([NotNull] TQueue queue, [NotNull] ProducerConsumerQueueOptions <T> options, CancellationToken token = default(CancellationToken)) : base(options, token) { bool createdNew; string name = Name.ToNullIfEmpty()?.LeftMax(Win32.MAX_PATH); if (name == null) { _semaphore = new Semaphore(Threads, Threads, null, out createdNew); } else { try { _semaphore = Semaphore.OpenExisting(name); createdNew = false; } catch (WaitHandleCannotBeOpenedException) { _semaphore = new Semaphore(Threads, Threads, name, out createdNew); } } if (createdNew && options is SemaphoreQueueOptions <T> { Security : { } } semaphoreQueueOptions) { // see https://docs.microsoft.com/en-us/dotnet/api/system.threading.semaphore.openexisting for examples _semaphore.SetAccessControl(semaphoreQueueOptions.Security); } IsOwner = createdNew; _queue = new QueueAdapter <TQueue, T>(queue); _allWorkDone = new ManualResetEvent(false); new Thread(Consume) { IsBackground = IsBackground, Priority = Priority }.Start(); }
/// <inheritdoc /> public SynchronizedProducerQueue(ThreadQueueMode mode, [NotNull] ProducerConsumerQueueOptions <T> options, CancellationToken token = default(CancellationToken)) { _queue = ProducerConsumerQueue.Create(mode, options, token); _producerQueue = _queue as IProducerQueue <TQueue, T> ?? throw new NotSupportedException(); }
/// <inheritdoc /> public EventQueue([NotNull] ProducerConsumerQueueOptions <T> options, CancellationToken token = default(CancellationToken)) : base(new Queue <T>(), options, token) { }