diff --git a/SmartThreadPool/Interfaces.cs b/SmartThreadPool/Interfaces.cs index ad8c63f..5b17f2b 100644 --- a/SmartThreadPool/Interfaces.cs +++ b/SmartThreadPool/Interfaces.cs @@ -271,7 +271,19 @@ namespace Amib.Threading /// Queue a work item. /// /// Returns a IWorkItemResult object, but its GetResult() will always return null - IWorkItemResult QueueWorkItem(Action action, T arg); + IWorkItemResult QueueWorkItem (Action action, WorkItemPriority priority); + + /// + /// Queue a work item. + /// + /// Returns a IWorkItemResult object, but its GetResult() will always return null + IWorkItemResult QueueWorkItem (Action action, T arg, WorkItemPriority priority); + + /// + /// Queue a work item. + /// + /// Returns a IWorkItemResult object, but its GetResult() will always return null + IWorkItemResult QueueWorkItem (Action action, T arg); /// /// Queue a work item. @@ -279,18 +291,36 @@ namespace Amib.Threading /// Returns a IWorkItemResult object, but its GetResult() will always return null IWorkItemResult QueueWorkItem(Action action, T1 arg1, T2 arg2); + /// + /// Queue a work item. + /// + /// Returns a IWorkItemResult object, but its GetResult() will always return null + IWorkItemResult QueueWorkItem (Action action, T1 arg1, T2 arg2, WorkItemPriority priority); + /// /// Queue a work item. /// /// Returns a IWorkItemResult object, but its GetResult() will always return null IWorkItemResult QueueWorkItem(Action action, T1 arg1, T2 arg2, T3 arg3); + /// + /// Queue a work item. + /// + /// Returns a IWorkItemResult object, but its GetResult() will always return null + IWorkItemResult QueueWorkItem (Action action, T1 arg1, T2 arg2, T3 arg3, WorkItemPriority priority); + /// /// Queue a work item. /// /// Returns a IWorkItemResult object, but its GetResult() will always return null IWorkItemResult QueueWorkItem(Action action, T1 arg1, T2 arg2, T3 arg3, T4 arg4); + /// + /// Queue a work item. + /// + /// Returns a IWorkItemResult object, but its GetResult() will always return null + IWorkItemResult QueueWorkItem (Action action, T1 arg1, T2 arg2, T3 arg3, T4 arg4, WorkItemPriority priority); + #endregion #region QueueWorkItem(Func<...>) diff --git a/SmartThreadPool/WorkItemsGroupBase.cs b/SmartThreadPool/WorkItemsGroupBase.cs index 106a1df..27fae5e 100644 --- a/SmartThreadPool/WorkItemsGroupBase.cs +++ b/SmartThreadPool/WorkItemsGroupBase.cs @@ -278,82 +278,110 @@ namespace Amib.Threading.Internal public IWorkItemResult QueueWorkItem(Action action) { - PreQueueWorkItem(); - WorkItem workItem = WorkItemFactory.CreateWorkItem( + return QueueWorkItem (action, SmartThreadPool.DefaultWorkItemPriority); + } + + public IWorkItemResult QueueWorkItem (Action action, WorkItemPriority priority) + { + PreQueueWorkItem (); + WorkItem workItem = WorkItemFactory.CreateWorkItem ( this, WIGStartInfo, delegate { - action.Invoke(); + action.Invoke (); return null; - }); - Enqueue(workItem); - return workItem.GetWorkItemResult(); + }, priority); + Enqueue (workItem); + return workItem.GetWorkItemResult (); } public IWorkItemResult QueueWorkItem(Action action, T arg) { - PreQueueWorkItem(); - WorkItem workItem = WorkItemFactory.CreateWorkItem( + return QueueWorkItem (action, arg, SmartThreadPool.DefaultWorkItemPriority); + } + + public IWorkItemResult QueueWorkItem (Action action, T arg, WorkItemPriority priority) + { + PreQueueWorkItem (); + WorkItem workItem = WorkItemFactory.CreateWorkItem ( this, WIGStartInfo, state => - { - action.Invoke(arg); - return null; - }, - WIGStartInfo.FillStateWithArgs ? new object[] { arg } : null); - Enqueue(workItem); - return workItem.GetWorkItemResult(); + { + action.Invoke (arg); + return null; + }, + WIGStartInfo.FillStateWithArgs ? new object[] { arg } : null, priority); + Enqueue (workItem); + return workItem.GetWorkItemResult (); } public IWorkItemResult QueueWorkItem(Action action, T1 arg1, T2 arg2) { - PreQueueWorkItem(); - WorkItem workItem = WorkItemFactory.CreateWorkItem( + return QueueWorkItem (action, arg1, arg2, SmartThreadPool.DefaultWorkItemPriority); + } + + public IWorkItemResult QueueWorkItem (Action action, T1 arg1, T2 arg2, WorkItemPriority priority) + { + PreQueueWorkItem (); + WorkItem workItem = WorkItemFactory.CreateWorkItem ( this, WIGStartInfo, state => { - action.Invoke(arg1, arg2); + action.Invoke (arg1, arg2); return null; }, - WIGStartInfo.FillStateWithArgs ? new object[] { arg1, arg2 } : null); - Enqueue(workItem); - return workItem.GetWorkItemResult(); + WIGStartInfo.FillStateWithArgs ? new object[] { arg1, arg2 } : null, priority); + Enqueue (workItem); + return workItem.GetWorkItemResult (); } public IWorkItemResult QueueWorkItem(Action action, T1 arg1, T2 arg2, T3 arg3) { - PreQueueWorkItem(); - WorkItem workItem = WorkItemFactory.CreateWorkItem( + return QueueWorkItem (action, arg1, arg2, arg3, SmartThreadPool.DefaultWorkItemPriority); + ; + } + + public IWorkItemResult QueueWorkItem (Action action, T1 arg1, T2 arg2, T3 arg3, WorkItemPriority priority) + { + PreQueueWorkItem (); + WorkItem workItem = WorkItemFactory.CreateWorkItem ( this, WIGStartInfo, state => { - action.Invoke(arg1, arg2, arg3); + action.Invoke (arg1, arg2, arg3); return null; }, - WIGStartInfo.FillStateWithArgs ? new object[] { arg1, arg2, arg3 } : null); - Enqueue(workItem); - return workItem.GetWorkItemResult(); + WIGStartInfo.FillStateWithArgs ? new object[] { arg1, arg2, arg3 } : null, priority); + Enqueue (workItem); + return workItem.GetWorkItemResult (); } public IWorkItemResult QueueWorkItem( Action action, T1 arg1, T2 arg2, T3 arg3, T4 arg4) { - PreQueueWorkItem(); - WorkItem workItem = WorkItemFactory.CreateWorkItem( + return QueueWorkItem (action, arg1, arg2, arg3, arg4, + SmartThreadPool.DefaultWorkItemPriority); + } + + public IWorkItemResult QueueWorkItem ( + Action action, T1 arg1, T2 arg2, T3 arg3, T4 arg4, WorkItemPriority priority) + { + PreQueueWorkItem (); + WorkItem workItem = WorkItemFactory.CreateWorkItem ( this, WIGStartInfo, state => { - action.Invoke(arg1, arg2, arg3, arg4); + action.Invoke (arg1, arg2, arg3, arg4); return null; }, - WIGStartInfo.FillStateWithArgs ? new object[] { arg1, arg2, arg3, arg4 } : null); - Enqueue(workItem); - return workItem.GetWorkItemResult(); + WIGStartInfo.FillStateWithArgs ? new object[] { arg1, arg2, arg3, arg4 } : null, priority); + Enqueue (workItem); + return workItem.GetWorkItemResult (); } #endregion