C# Class DotNetWorkQueue.TaskScheduling.SmartThreadPoolTaskScheduler

A task scheduler for IConsumerQueueScheduler This uses SmartThreadPool https://github.com/amibar/SmartThreadPool to handle the threads internally
Inheritance: ATaskScheduler
Mostra file Open project: blehnen/DotNetWorkQueue

Private Properties

Property Type Description
PostExecuteWorkItemCallback void

Public Methods

Method Description
AddTask ( Task task ) : void

Adds a new task to the scheduler.

AddWorkGroup ( string name, int concurrencyLevel ) : IWorkGroup

Adds a new work group.

AddWorkGroup ( string name, int concurrencyLevel, int maxQueueSize ) : IWorkGroup

Adds a new work group.

RoomForNewWorkGroupTask ( IWorkGroup group ) : RoomForNewTaskResult

If true, the task scheduler has room for the specified work group task

SmartThreadPoolTaskScheduler ( ITaskSchedulerConfiguration configuration, IWaitForEventOrCancelThreadPool waitForFreeThread, IMetrics metrics ) : System

Initializes a new instance of the SmartThreadPoolTaskScheduler class.

Start ( ) : void

Starts this instance.

Subscribe ( ) : int

Informs the scheduler that it has another client connected

UnSubscribe ( int id ) : void

Informs the scheduler that a client has disconnected

Protected Methods

Method Description
DeincrementCounter ( ) : void

De-increments the counter for the running tasks

DeincrementGroup ( IWorkGroup group ) : void

De-increments the task counter for a specific group.

Dispose ( bool disposing ) : void

Releases unmanaged and - optionally - managed resources.

GetScheduledTasks ( ) : IEnumerable

Gets the tasks currently scheduled to this scheduler.

This will always return an empty enumerable, as tasks are launched as soon as they're queued; we also don't want the .net scheduler to mess with our internal queue.

HaveRoomForWorkGroupTask ( IWorkGroup group ) : bool

Returns true if the work group has room for a new task

IncrementCounter ( ) : void

Increments the counter for the running tasks

IncrementGroup ( IWorkGroup group ) : void

Increments the task count for a specific group

QueueTask ( Task task ) : void

Queues a T:System.Threading.Tasks.Task to the scheduler.

SetWaitHandle ( IWorkGroup group ) : void

Sets the wait handle.

ThrowIfDisposed ( [ name = "" ) : void

Throws an exception if this instance has been disposed.

TryExecuteTaskInline ( Task task, bool taskWasPreviouslyQueued ) : bool

Runs the provided task on the current thread.

TryExecuteTaskWrapped ( Task task, StateInformation state ) : StateInformation

A wrapper for executing the task, so that we can return the state information back to the caller

Private Methods

Method Description
PostExecuteWorkItemCallback ( IWorkItemResult wir ) : void

Fires after each task is complete.

Method Details

AddTask() public method

Adds a new task to the scheduler.
public AddTask ( Task task ) : void
task Task The task.
return void

AddWorkGroup() public method

Adds a new work group.
public AddWorkGroup ( string name, int concurrencyLevel ) : IWorkGroup
name string The name.
concurrencyLevel int The concurrency level.
return IWorkGroup

AddWorkGroup() public method

Adds a new work group.
Start must be called on the scheduler before adding work groups
public AddWorkGroup ( string name, int concurrencyLevel, int maxQueueSize ) : IWorkGroup
name string The name.
concurrencyLevel int The concurrency level.
maxQueueSize int Maximum size of the queue. Work groups have a queue that is separate per queue, and is not shared with non work group items
return IWorkGroup

DeincrementCounter() protected method

De-increments the counter for the running tasks
protected DeincrementCounter ( ) : void
return void

DeincrementGroup() protected method

De-increments the task counter for a specific group.
protected DeincrementGroup ( IWorkGroup group ) : void
group IWorkGroup The group.
return void

Dispose() protected method

Releases unmanaged and - optionally - managed resources.
protected Dispose ( bool disposing ) : void
disposing bool true to release both managed and unmanaged resources; false to release only unmanaged resources.
return void

GetScheduledTasks() protected method

Gets the tasks currently scheduled to this scheduler.
This will always return an empty enumerable, as tasks are launched as soon as they're queued; we also don't want the .net scheduler to mess with our internal queue.
protected GetScheduledTasks ( ) : IEnumerable
return IEnumerable

HaveRoomForWorkGroupTask() protected method

Returns true if the work group has room for a new task
protected HaveRoomForWorkGroupTask ( IWorkGroup group ) : bool
group IWorkGroup The group.
return bool

IncrementCounter() protected method

Increments the counter for the running tasks
protected IncrementCounter ( ) : void
return void

IncrementGroup() protected method

Increments the task count for a specific group
protected IncrementGroup ( IWorkGroup group ) : void
group IWorkGroup The group.
return void

QueueTask() protected final method

Queues a T:System.Threading.Tasks.Task to the scheduler.
protected final QueueTask ( Task task ) : void
task Task The to be queued.
return void

RoomForNewWorkGroupTask() public method

If true, the task scheduler has room for the specified work group task
public RoomForNewWorkGroupTask ( IWorkGroup group ) : RoomForNewTaskResult
group IWorkGroup The group.
return RoomForNewTaskResult

SetWaitHandle() protected method

Sets the wait handle.
protected SetWaitHandle ( IWorkGroup group ) : void
group IWorkGroup The group.
return void

SmartThreadPoolTaskScheduler() public method

Initializes a new instance of the SmartThreadPoolTaskScheduler class.
public SmartThreadPoolTaskScheduler ( ITaskSchedulerConfiguration configuration, IWaitForEventOrCancelThreadPool waitForFreeThread, IMetrics metrics ) : System
configuration ITaskSchedulerConfiguration The configuration.
waitForFreeThread IWaitForEventOrCancelThreadPool The wait for free thread.
metrics IMetrics the metrics factory
return System

Start() public method

Starts this instance.
Start must only be called 1 time
public Start ( ) : void
return void

Subscribe() public method

Informs the scheduler that it has another client connected
public Subscribe ( ) : int
return int

ThrowIfDisposed() protected method

Throws an exception if this instance has been disposed.
protected ThrowIfDisposed ( [ name = "" ) : void
name [ The name.
return void

TryExecuteTaskInline() protected method

Runs the provided task on the current thread.
protected TryExecuteTaskInline ( Task task, bool taskWasPreviouslyQueued ) : bool
task Task The task to be executed.
taskWasPreviouslyQueued bool Ignored.
return bool

TryExecuteTaskWrapped() protected method

A wrapper for executing the task, so that we can return the state information back to the caller
protected TryExecuteTaskWrapped ( Task task, StateInformation state ) : StateInformation
task Task The task.
state StateInformation The state.
return StateInformation

UnSubscribe() public method

Informs the scheduler that a client has disconnected
public UnSubscribe ( int id ) : void
id int The client identifier.
return void