/// <summary> /// Initializes the queue. /// </summary> /// <param name="onEnqueueAsync">Callback routine to be called when a new item is added to the queue.</param> public AsyncQueue(OnEnqueueAsync onEnqueueAsync) { Guard.NotNull(onEnqueueAsync, nameof(onEnqueueAsync)); this.items = new ConcurrentQueue <T>(); this.signal = new AsyncManualResetEvent(); this.onEnqueueAsync = onEnqueueAsync; this.cancellationTokenSource = new CancellationTokenSource(); this.consumerTask = ConsumerAsync(); }
/// <summary> /// Initializes the queue either in blocking dequeue mode or in callback mode. /// </summary> /// <param name="onEnqueueAsync">Callback routine to be called when a new item is added to the queue, or <c>null</c> to operate in blocking dequeue mode.</param> public AsyncQueue(OnEnqueueAsync onEnqueueAsync = null) { this.callbackMode = onEnqueueAsync != null; this.lockObject = new object(); this.items = new Queue <T>(); this.signal = new AsyncManualResetEvent(); this.onEnqueueAsync = onEnqueueAsync; this.cancellationTokenSource = new CancellationTokenSource(); this.consumerTask = this.callbackMode ? this.ConsumerAsync() : null; }
/// <summary> /// Initializes the queue either in blocking dequeue mode or in callback mode. /// </summary> /// <param name="onEnqueueAsync"> /// Callback routine to be called when a new item is added to the queue, or <c>null</c> to /// operate in blocking dequeue mode. /// </param> public AsyncQueue(OnEnqueueAsync onEnqueueAsync = null) { callbackMode = onEnqueueAsync != null; lockObject = new object(); items = new Queue <T>(); signal = new AsyncManualResetEvent(); this.onEnqueueAsync = onEnqueueAsync; cancellationTokenSource = new CancellationTokenSource(); asyncContext = new AsyncLocal <AsyncContext>(); ConsumerTask = callbackMode ? ConsumerAsync() : null; }
/// <summary> /// Initializes the queue either in blocking dequeue mode or in callback mode. /// </summary> /// <param name="onEnqueueAsync">Callback routine to be called when a new item is added to the queue, or <c>null</c> to operate in blocking dequeue mode.</param> internal AsyncQueue(OnEnqueueAsync onEnqueueAsync = null) { this._callbackMode = onEnqueueAsync != null; this._lockObject = new object(); this._items = new Queue <T>(); this._signal = new AsyncManualResetEvent(); this._onEnqueueAsync = onEnqueueAsync; this._cancellationTokenSource = new CancellationTokenSource(); this._asyncContext = new AsyncLocal <AsyncContext>(); this.ConsumerTask = this._callbackMode ? this.ConsumerAsync() : null; }
/// <summary> /// Initializes the queue either in blocking dequeue mode or in callback mode. /// </summary> /// <param name="onEnqueueAsync">Callback routine to be called when a new item is added to the queue, or <c>null</c> to operate in blocking dequeue mode.</param> public AsyncQueue(OnEnqueueAsync onEnqueueAsync = null) { this.callbackMode = onEnqueueAsync != null; this.lockObject = new object(); this.items = new Queue <T>(); this.signal = new AsyncManualResetEvent(); this.onEnqueueAsync = onEnqueueAsync; this.cancellationTokenSource = new CancellationTokenSource(); this.ConsumerTask = this.callbackMode ? this.ConsumerAsync() : null; this.callbackExecutionInProgress = new AsyncLocal <bool>() { Value = false }; this.disposeRequested = new AsyncLocal <bool>() { Value = false }; }