Added WorkItemPriority as optional parameter to Func overloads in WorkItemsGroupBase.cs

This commit is contained in:
ggrote
2013-01-30 17:30:20 +01:00
parent c99b24977c
commit 4eb7cf7302
2 changed files with 29 additions and 83 deletions
+10 -40
View File
@@ -265,61 +265,31 @@ namespace Amib.Threading
/// Queue a work item. /// Queue a work item.
/// </summary> /// </summary>
/// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns> /// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
IWorkItemResult QueueWorkItem(Action action); IWorkItemResult QueueWorkItem(Action action, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority);
/// <summary> /// <summary>
/// Queue a work item. /// Queue a work item.
/// </summary> /// </summary>
/// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns> /// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
IWorkItemResult QueueWorkItem (Action action, WorkItemPriority priority); IWorkItemResult QueueWorkItem<T>(Action<T> action, T arg, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority);
/// <summary> /// <summary>
/// Queue a work item. /// Queue a work item.
/// </summary> /// </summary>
/// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns> /// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
IWorkItemResult QueueWorkItem<T> (Action<T> action, T arg, WorkItemPriority priority); IWorkItemResult QueueWorkItem<T1, T2>(Action<T1, T2> action, T1 arg1, T2 arg2, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority);
/// <summary> /// <summary>
/// Queue a work item. /// Queue a work item.
/// </summary> /// </summary>
/// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns> /// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
IWorkItemResult QueueWorkItem<T> (Action<T> action, T arg); IWorkItemResult QueueWorkItem<T1, T2, T3>(Action<T1, T2, T3> action, T1 arg1, T2 arg2, T3 arg3, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority);
/// <summary> /// <summary>
/// Queue a work item. /// Queue a work item.
/// </summary> /// </summary>
/// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns> /// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
IWorkItemResult QueueWorkItem<T1, T2>(Action<T1, T2> action, T1 arg1, T2 arg2); IWorkItemResult QueueWorkItem<T1, T2, T3, T4>(Action<T1, T2, T3, T4> action, T1 arg1, T2 arg2, T3 arg3, T4 arg4, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority);
/// <summary>
/// Queue a work item.
/// </summary>
/// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
IWorkItemResult QueueWorkItem<T1, T2> (Action<T1, T2> action, T1 arg1, T2 arg2, WorkItemPriority priority);
/// <summary>
/// Queue a work item.
/// </summary>
/// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
IWorkItemResult QueueWorkItem<T1, T2, T3>(Action<T1, T2, T3> action, T1 arg1, T2 arg2, T3 arg3);
/// <summary>
/// Queue a work item.
/// </summary>
/// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
IWorkItemResult QueueWorkItem<T1, T2, T3> (Action<T1, T2, T3> action, T1 arg1, T2 arg2, T3 arg3, WorkItemPriority priority);
/// <summary>
/// Queue a work item.
/// </summary>
/// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
IWorkItemResult QueueWorkItem<T1, T2, T3, T4>(Action<T1, T2, T3, T4> action, T1 arg1, T2 arg2, T3 arg3, T4 arg4);
/// <summary>
/// Queue a work item.
/// </summary>
/// <returns>Returns a IWorkItemResult object, but its GetResult() will always return null</returns>
IWorkItemResult QueueWorkItem<T1, T2, T3, T4> (Action<T1, T2, T3, T4> action, T1 arg1, T2 arg2, T3 arg3, T4 arg4, WorkItemPriority priority);
#endregion #endregion
@@ -330,35 +300,35 @@ namespace Amib.Threading
/// </summary> /// </summary>
/// <returns>Returns a IWorkItemResult&lt;TResult&gt; object. /// <returns>Returns a IWorkItemResult&lt;TResult&gt; object.
/// its GetResult() returns a TResult object</returns> /// its GetResult() returns a TResult object</returns>
IWorkItemResult<TResult> QueueWorkItem<TResult>(Func<TResult> func); IWorkItemResult<TResult> QueueWorkItem<TResult>(Func<TResult> func, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority);
/// <summary> /// <summary>
/// Queue a work item. /// Queue a work item.
/// </summary> /// </summary>
/// <returns>Returns a IWorkItemResult&lt;TResult&gt; object. /// <returns>Returns a IWorkItemResult&lt;TResult&gt; object.
/// its GetResult() returns a TResult object</returns> /// its GetResult() returns a TResult object</returns>
IWorkItemResult<TResult> QueueWorkItem<T, TResult>(Func<T, TResult> func, T arg); IWorkItemResult<TResult> QueueWorkItem<T, TResult>(Func<T, TResult> func, T arg, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority);
/// <summary> /// <summary>
/// Queue a work item. /// Queue a work item.
/// </summary> /// </summary>
/// <returns>Returns a IWorkItemResult&lt;TResult&gt; object. /// <returns>Returns a IWorkItemResult&lt;TResult&gt; object.
/// its GetResult() returns a TResult object</returns> /// its GetResult() returns a TResult object</returns>
IWorkItemResult<TResult> QueueWorkItem<T1, T2, TResult>(Func<T1, T2, TResult> func, T1 arg1, T2 arg2); IWorkItemResult<TResult> QueueWorkItem<T1, T2, TResult>(Func<T1, T2, TResult> func, T1 arg1, T2 arg2, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority);
/// <summary> /// <summary>
/// Queue a work item. /// Queue a work item.
/// </summary> /// </summary>
/// <returns>Returns a IWorkItemResult&lt;TResult&gt; object. /// <returns>Returns a IWorkItemResult&lt;TResult&gt; object.
/// its GetResult() returns a TResult object</returns> /// its GetResult() returns a TResult object</returns>
IWorkItemResult<TResult> QueueWorkItem<T1, T2, T3, TResult>(Func<T1, T2, T3, TResult> func, T1 arg1, T2 arg2, T3 arg3); IWorkItemResult<TResult> QueueWorkItem<T1, T2, T3, TResult>(Func<T1, T2, T3, TResult> func, T1 arg1, T2 arg2, T3 arg3, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority);
/// <summary> /// <summary>
/// Queue a work item. /// Queue a work item.
/// </summary> /// </summary>
/// <returns>Returns a IWorkItemResult&lt;TResult&gt; object. /// <returns>Returns a IWorkItemResult&lt;TResult&gt; object.
/// its GetResult() returns a TResult object</returns> /// its GetResult() returns a TResult object</returns>
IWorkItemResult<TResult> QueueWorkItem<T1, T2, T3, T4, TResult>(Func<T1, T2, T3, T4, TResult> func, T1 arg1, T2 arg2, T3 arg3, T4 arg4); IWorkItemResult<TResult> QueueWorkItem<T1, T2, T3, T4, TResult>(Func<T1, T2, T3, T4, TResult> func, T1 arg1, T2 arg2, T3 arg3, T4 arg4, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority);
#endregion #endregion
} }
+19 -43
View File
@@ -276,12 +276,7 @@ namespace Amib.Threading.Internal
#region QueueWorkItem(Action<...>) #region QueueWorkItem(Action<...>)
public IWorkItemResult QueueWorkItem(Action action) public IWorkItemResult QueueWorkItem(Action action, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority)
{
return QueueWorkItem (action, SmartThreadPool.DefaultWorkItemPriority);
}
public IWorkItemResult QueueWorkItem (Action action, WorkItemPriority priority)
{ {
PreQueueWorkItem (); PreQueueWorkItem ();
WorkItem workItem = WorkItemFactory.CreateWorkItem ( WorkItem workItem = WorkItemFactory.CreateWorkItem (
@@ -296,12 +291,7 @@ namespace Amib.Threading.Internal
return workItem.GetWorkItemResult (); return workItem.GetWorkItemResult ();
} }
public IWorkItemResult QueueWorkItem<T>(Action<T> action, T arg) public IWorkItemResult QueueWorkItem<T>(Action<T> action, T arg, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority)
{
return QueueWorkItem<T> (action, arg, SmartThreadPool.DefaultWorkItemPriority);
}
public IWorkItemResult QueueWorkItem<T> (Action<T> action, T arg, WorkItemPriority priority)
{ {
PreQueueWorkItem (); PreQueueWorkItem ();
WorkItem workItem = WorkItemFactory.CreateWorkItem ( WorkItem workItem = WorkItemFactory.CreateWorkItem (
@@ -317,12 +307,7 @@ namespace Amib.Threading.Internal
return workItem.GetWorkItemResult (); return workItem.GetWorkItemResult ();
} }
public IWorkItemResult QueueWorkItem<T1, T2>(Action<T1, T2> action, T1 arg1, T2 arg2) public IWorkItemResult QueueWorkItem<T1, T2>(Action<T1, T2> action, T1 arg1, T2 arg2, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority)
{
return QueueWorkItem<T1, T2> (action, arg1, arg2, SmartThreadPool.DefaultWorkItemPriority);
}
public IWorkItemResult QueueWorkItem<T1, T2> (Action<T1, T2> action, T1 arg1, T2 arg2, WorkItemPriority priority)
{ {
PreQueueWorkItem (); PreQueueWorkItem ();
WorkItem workItem = WorkItemFactory.CreateWorkItem ( WorkItem workItem = WorkItemFactory.CreateWorkItem (
@@ -338,13 +323,7 @@ namespace Amib.Threading.Internal
return workItem.GetWorkItemResult (); return workItem.GetWorkItemResult ();
} }
public IWorkItemResult QueueWorkItem<T1, T2, T3>(Action<T1, T2, T3> action, T1 arg1, T2 arg2, T3 arg3) public IWorkItemResult QueueWorkItem<T1, T2, T3>(Action<T1, T2, T3> action, T1 arg1, T2 arg2, T3 arg3, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority)
{
return QueueWorkItem<T1, T2, T3> (action, arg1, arg2, arg3, SmartThreadPool.DefaultWorkItemPriority);
;
}
public IWorkItemResult QueueWorkItem<T1, T2, T3> (Action<T1, T2, T3> action, T1 arg1, T2 arg2, T3 arg3, WorkItemPriority priority)
{ {
PreQueueWorkItem (); PreQueueWorkItem ();
WorkItem workItem = WorkItemFactory.CreateWorkItem ( WorkItem workItem = WorkItemFactory.CreateWorkItem (
@@ -360,15 +339,8 @@ namespace Amib.Threading.Internal
return workItem.GetWorkItemResult (); return workItem.GetWorkItemResult ();
} }
public IWorkItemResult QueueWorkItem<T1, T2, T3, T4>(
Action<T1, T2, T3, T4> action, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
{
return QueueWorkItem<T1, T2, T3, T4> (action, arg1, arg2, arg3, arg4,
SmartThreadPool.DefaultWorkItemPriority);
}
public IWorkItemResult QueueWorkItem<T1, T2, T3, T4> ( public IWorkItemResult QueueWorkItem<T1, T2, T3, T4> (
Action<T1, T2, T3, T4> action, T1 arg1, T2 arg2, T3 arg3, T4 arg4, WorkItemPriority priority) Action<T1, T2, T3, T4> action, T1 arg1, T2 arg2, T3 arg3, T4 arg4, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority)
{ {
PreQueueWorkItem (); PreQueueWorkItem ();
WorkItem workItem = WorkItemFactory.CreateWorkItem ( WorkItem workItem = WorkItemFactory.CreateWorkItem (
@@ -388,7 +360,7 @@ namespace Amib.Threading.Internal
#region QueueWorkItem(Func<...>) #region QueueWorkItem(Func<...>)
public IWorkItemResult<TResult> QueueWorkItem<TResult>(Func<TResult> func) public IWorkItemResult<TResult> QueueWorkItem<TResult>(Func<TResult> func, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority)
{ {
PreQueueWorkItem(); PreQueueWorkItem();
WorkItem workItem = WorkItemFactory.CreateWorkItem( WorkItem workItem = WorkItemFactory.CreateWorkItem(
@@ -397,12 +369,12 @@ namespace Amib.Threading.Internal
state => state =>
{ {
return func.Invoke(); return func.Invoke();
}); }, priority);
Enqueue(workItem); Enqueue(workItem);
return new WorkItemResultTWrapper<TResult>(workItem.GetWorkItemResult()); return new WorkItemResultTWrapper<TResult>(workItem.GetWorkItemResult());
} }
public IWorkItemResult<TResult> QueueWorkItem<T, TResult>(Func<T, TResult> func, T arg) public IWorkItemResult<TResult> QueueWorkItem<T, TResult>(Func<T, TResult> func, T arg, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority)
{ {
PreQueueWorkItem(); PreQueueWorkItem();
WorkItem workItem = WorkItemFactory.CreateWorkItem( WorkItem workItem = WorkItemFactory.CreateWorkItem(
@@ -412,12 +384,13 @@ namespace Amib.Threading.Internal
{ {
return func.Invoke(arg); return func.Invoke(arg);
}, },
WIGStartInfo.FillStateWithArgs ? new object[] { arg } : null); WIGStartInfo.FillStateWithArgs ? new object[] { arg } : null,
priority);
Enqueue(workItem); Enqueue(workItem);
return new WorkItemResultTWrapper<TResult>(workItem.GetWorkItemResult()); return new WorkItemResultTWrapper<TResult>(workItem.GetWorkItemResult());
} }
public IWorkItemResult<TResult> QueueWorkItem<T1, T2, TResult>(Func<T1, T2, TResult> func, T1 arg1, T2 arg2) public IWorkItemResult<TResult> QueueWorkItem<T1, T2, TResult>(Func<T1, T2, TResult> func, T1 arg1, T2 arg2, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority)
{ {
PreQueueWorkItem(); PreQueueWorkItem();
WorkItem workItem = WorkItemFactory.CreateWorkItem( WorkItem workItem = WorkItemFactory.CreateWorkItem(
@@ -427,13 +400,14 @@ namespace Amib.Threading.Internal
{ {
return func.Invoke(arg1, arg2); return func.Invoke(arg1, arg2);
}, },
WIGStartInfo.FillStateWithArgs ? new object[] { arg1, arg2 } : null); WIGStartInfo.FillStateWithArgs ? new object[] { arg1, arg2 } : null,
priority);
Enqueue(workItem); Enqueue(workItem);
return new WorkItemResultTWrapper<TResult>(workItem.GetWorkItemResult()); return new WorkItemResultTWrapper<TResult>(workItem.GetWorkItemResult());
} }
public IWorkItemResult<TResult> QueueWorkItem<T1, T2, T3, TResult>( public IWorkItemResult<TResult> QueueWorkItem<T1, T2, T3, TResult>(
Func<T1, T2, T3, TResult> func, T1 arg1, T2 arg2, T3 arg3) Func<T1, T2, T3, TResult> func, T1 arg1, T2 arg2, T3 arg3, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority)
{ {
PreQueueWorkItem(); PreQueueWorkItem();
WorkItem workItem = WorkItemFactory.CreateWorkItem( WorkItem workItem = WorkItemFactory.CreateWorkItem(
@@ -443,13 +417,14 @@ namespace Amib.Threading.Internal
{ {
return func.Invoke(arg1, arg2, arg3); return func.Invoke(arg1, arg2, arg3);
}, },
WIGStartInfo.FillStateWithArgs ? new object[] { arg1, arg2, arg3 } : null); WIGStartInfo.FillStateWithArgs ? new object[] { arg1, arg2, arg3 } : null,
priority);
Enqueue(workItem); Enqueue(workItem);
return new WorkItemResultTWrapper<TResult>(workItem.GetWorkItemResult()); return new WorkItemResultTWrapper<TResult>(workItem.GetWorkItemResult());
} }
public IWorkItemResult<TResult> QueueWorkItem<T1, T2, T3, T4, TResult>( public IWorkItemResult<TResult> QueueWorkItem<T1, T2, T3, T4, TResult>(
Func<T1, T2, T3, T4, TResult> func, T1 arg1, T2 arg2, T3 arg3, T4 arg4) Func<T1, T2, T3, T4, TResult> func, T1 arg1, T2 arg2, T3 arg3, T4 arg4, WorkItemPriority priority = SmartThreadPool.DefaultWorkItemPriority)
{ {
PreQueueWorkItem(); PreQueueWorkItem();
WorkItem workItem = WorkItemFactory.CreateWorkItem( WorkItem workItem = WorkItemFactory.CreateWorkItem(
@@ -459,7 +434,8 @@ namespace Amib.Threading.Internal
{ {
return func.Invoke(arg1, arg2, arg3, arg4); return func.Invoke(arg1, arg2, arg3, arg4);
}, },
WIGStartInfo.FillStateWithArgs ? new object[] { arg1, arg2, arg3, arg4 } : null); WIGStartInfo.FillStateWithArgs ? new object[] { arg1, arg2, arg3, arg4 } : null,
priority);
Enqueue(workItem); Enqueue(workItem);
return new WorkItemResultTWrapper<TResult>(workItem.GetWorkItemResult()); return new WorkItemResultTWrapper<TResult>(workItem.GetWorkItemResult());
} }