protected override void OnItemProcessed(QueuerItemEventArgs <T> e, QueuerState <T> state) { if (!e.Stop) { this.Item_MarkCompleted(state); } base.OnItemProcessed(e, state); }
protected override void OnItemProcessing(QueuerItemEventArgs <T> e, QueuerState <T> state) { base.OnItemProcessing(e, state); if (!e.Stop) { this.ItemsInQueue.Add(state.CurrentItem = e.Item); } }
protected override void Queuer_ItemProcessing(object sender, QueuerItemEventArgs <int> e) { this.AssignNextItem(e); if (!e.Stop) { base.Queuer_ItemProcessing(sender, e); } }
protected virtual void OnItemError(QueuerItemEventArgs <T> e) { EventHandler <QueuerItemEventArgs <T> > handler = this.ItemError; if (handler != null) { handler(this, e); } }
protected virtual void OnItemProcessing(QueuerItemEventArgs <T> e, QueuerState <T> state) { EventHandler <QueuerItemEventArgs <T> > handler = this.ItemProcessing; if (handler != null) { handler(this, e); } }
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); } } }
private void AssignNextItem(QueuerItemEventArgs <int> e) { lock (this._lock) { if (this._processed.Count == this._items.Length) { e.Stop = true; } else { int result = this._items.Where(x => !this._processed.Contains(x)).First(); this._processed.Add(e.Item = result); } } }
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); } }
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)); } } }
private void Monitor_TimeExceeded(object sender, QueuerMonitorEventArgs e) { QueuerItemEventArgs <T> args = (QueuerItemEventArgs <T>)(e.State); args.Exception = e.Exception; }