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