/// <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();
        }
예제 #2
0
 /// <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;
 }
예제 #3
0
 /// <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;
 }
예제 #4
0
 /// <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;
 }
예제 #5
0
 /// <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
     };
 }