Example #1
0
        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);
        }
Example #2
0
 public Boolean Add(WorkUnit record)
 {
     if (record == null)
     {
         return(false);
     }
     WorkUnits.Add(record);
     return(SaveChanges() == 1);
 }
Example #3
0
 public void RemoveRange(params WorkUnit[] records)
 {
     if (records.Length == 0)
     {
         return;
     }
     WorkUnits.RemoveRange(records);
     SaveChanges();
 }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
 ///<summary>
 ///Appends another data work unit for processing.
 ///</summary>
 public void AddWorkUnit(T workUnit)
 {
     WorkUnits.Add(workUnit);
 }
Example #7
0
 ///<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();
 }