private void InnerWorkLoop() { foreach (var workUnit in WorkUnits.GetConsumingEnumerable()) { // requires WorkUnits to be empty and IsCompleted to be true var transformedWorkUnit = Process(workUnit); if (!EqualityComparer <T> .Default.Equals(transformedWorkUnit, default(T))) { foreach (var consumer in Consumers) { consumer.WorkUnits.Add(transformedWorkUnit); } } if (ExecuteInParallel) { Parallel.ForEach(Consumers, (consumer) => { consumer.Begin(); }); } else { foreach (var consumer in Consumers) { consumer.Begin(); } } } OnProcessCompleted(EventArgs.Empty); }
public Boolean Add(WorkUnit record) { if (record == null) { return(false); } WorkUnits.Add(record); return(SaveChanges() == 1); }
public void RemoveRange(params WorkUnit[] records) { if (records.Length == 0) { return; } WorkUnits.RemoveRange(records); SaveChanges(); }
public Boolean Update(WorkUnit record) { if (record == null) { return(false); } var attached = WorkUnits.Attach(record); if (attached == null) { return(false); } Entry(attached).State = EntityState.Modified; return(SaveChanges() == 1); }
public Boolean Remove(WorkUnit record) { if (record == null) { return(false); } var attached = WorkUnits.Attach(record); if (attached == null) { return(false); } WorkUnits.Remove(attached); return(SaveChanges() == 1); }
///<summary> ///Appends another data work unit for processing. ///</summary> public void AddWorkUnit(T workUnit) { WorkUnits.Add(workUnit); }
///<summary> ///Instructs child processes to stop processing work units once there are no work units left to be processed. ///</summary> public void CompleteAdding() { WorkUnits.CompleteAdding(); }