Esempio n. 1
0
 protected override void OnItemProcessing(QueuerItemEventArgs <T> e, QueuerState <T> state)
 {
     base.OnItemProcessing(e, state);
     if (!e.Stop)
     {
         this.ItemsInQueue.Add(state.CurrentItem = e.Item);
     }
 }
Esempio n. 2
0
 protected override void OnItemProcessed(QueuerItemEventArgs <T> e, QueuerState <T> state)
 {
     if (!e.Stop)
     {
         this.Item_MarkCompleted(state);
     }
     base.OnItemProcessed(e, state);
 }
Esempio n. 3
0
        protected virtual void Process_ExecuteAsync(QueuerState <T> state, int index)
        {
            var worker = new Thread(this.Process_ExecuteNext)
            {
                Name = string.Format("Worker {0}", index + 1)
            };

            worker.Start(state);
        }
Esempio n. 4
0
        protected virtual void OnItemProcessing(QueuerItemEventArgs <T> e, QueuerState <T> state)
        {
            EventHandler <QueuerItemEventArgs <T> > handler = this.ItemProcessing;

            if (handler != null)
            {
                handler(this, e);
            }
        }
Esempio n. 5
0
        internal void Process(QueuerHandler <T> handler)
        {
            var state = new QueuerState <T>(handler);
            var args  = new QueuerProcessEventArgs <T>(state);

            this.OnProcessInitialized(args);

            for (int i = 0; i < this.ParallelTaskCount; i++)
            {
                this.Process_ExecuteAsync(state, i);
            }
        }
Esempio n. 6
0
        protected override void Process_ExecuteNext(object obj)
        {
            var state = new QueuerState <T>((QueuerState <T>)(obj));

            if (this.Process_AssignNext(state))
            {
                this.Process_ExecuteSpecific(state);
            }
            else
            {
                this.OnProcessFinalized(state);
            }
        }
Esempio n. 7
0
        internal void Process(QueuerHandler <T> handler, IEnumerable <T> items)
        {
            var state = new QueuerState <T>(handler, items);
            var args  = new QueuerProcessEventArgs <T>(state);
            var count = Math.Min(this.ParallelTaskCount, items.Count());

            this.OnProcessInitialized(args);

            for (int i = 0; i < count; i++)
            {
                this.Process_ExecuteAsync(state, i);
            }
        }
Esempio n. 8
0
 protected virtual void OnItemProcessed(QueuerItemEventArgs <T> e, QueuerState <T> state)
 {
     if (e.Stop)
     {
         this.Item_ProcessStopped(state);
     }
     else if (e.Exception == null)
     {
         EventHandler <QueuerItemEventArgs <T> > handler = this.ItemProcessed;
         if (handler != null)
         {
             handler(this, e);
         }
     }
 }
Esempio n. 9
0
        private bool Process_AssignNext(QueuerState <T> state)
        {
            lock (this._taskQueryLock)
            {
                T nextTask = this.IsProcessing ? state.Items.Where(x => !this.ItemsInQueue.Contains(x)).FirstOrDefault() : default(T);

                if (nextTask.IsDefaultValue())
                {
                    return(false);
                }
                else
                {
                    this.ItemsInQueue.Add(state.CurrentItem = nextTask);
                    return(true);
                }
            }
        }
Esempio n. 10
0
        protected virtual void Process_ExecuteSpecific(QueuerState <T> state)
        {
            var e = new QueuerItemEventArgs <T>(state.CurrentItem, Thread.CurrentThread.Name);

            // Before item process
            this.OnItemProcessing(e, state);

            // Item process
            if (!e.Stop)
            {
                this.Process_ExecuteHandler(state, e);
            }

            // After item process
            this.OnItemProcessed(new QueuerItemEventArgs <T>(e), state);

            // Next item
            if (!e.Stop)
            {
                this.Process_ExecuteNext(state);
            }
        }
Esempio n. 11
0
 protected virtual void Process_ExecuteHandler(QueuerState <T> state, QueuerItemEventArgs <T> e)
 {
     try
     {
         using (var monitor = new QueuerMonitor(this.ProcessItemTimeout, string.Format("Process task {0}.", e.Item), e))
         {
             monitor.TimeExceeded += new EventHandler <QueuerMonitorEventArgs>(Monitor_TimeExceeded);
             state.Handler.Invoke(state.CurrentItem);
         }
     }
     catch (Exception ex)
     {
         e.Exception = e.Exception.Append(ex);
     }
     finally
     {
         if (e.Exception != null)
         {
             this.OnItemError(new QueuerItemEventArgs <T>(e));
         }
     }
 }
Esempio n. 12
0
        protected virtual void Item_ProcessStopped(QueuerState <T> state)
        {
            var worker = new Thread(this.OnProcessFinalized);

            worker.Start(state);
        }
Esempio n. 13
0
 protected virtual void Item_MarkCompleted(QueuerState <T> state)
 {
     this.ItemsCompleted.Add(state.CurrentItem);
     state.CurrentItem = default(T);
 }
Esempio n. 14
0
        protected override void Process_ExecuteNext(object obj)
        {
            var state = new QueuerState <T>((QueuerState <T>)(obj));

            this.Process_ExecuteSpecific(state);
        }