C# Class Brass9.Threading.IntervalTask

For ASP.Net applications. Starts a thread to perform a task at BelowNormal priority on a regular interval. Meant for long-running ASP.Net apps that never recycle instead of a Windows Service or cron job. If the task runs longer than the timer interval, the existing thread is left be and nothing else happens until the next time the interval fires where the worker thread is not running. Cannot handle multiple tasks; if you have multiple tasks to manage, build on top of this class by adding task registration to a single task that this class runs. The task is defined as an Action<IntervalTaskContext>, where the argument it takes is a context object that has a single property: Stopping. If the ASP.Net app needs to shut down for some reason, and the task is currently running, this flag will flip to true, and the app will be forcibly torn down by the environment in 30 seconds. This means the task should check Stopping regularly to see if it should cut its work short. Note that the 30 seconds is for the entire app to tie up what it's doing, not just this task - so be conservative. For more on the ASP.Net App teardown process: http://msdn.microsoft.com/en-us/library/system.web.hosting.iregisteredobject.stop.aspx http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx
Inheritance: System.Web.Hosting.IRegisteredObject, IDisposable
Show file Open project: b9chris/ASP.Net-Long-Running-Interval-Task Class Usage Examples

Protected Properties

Property Type Description
intervalTimer TimerInfo
taskAction System.Action
taskThread Thread

Public Methods

Method Description
CreateTask ( System.Action taskAction ) : IntervalTask

Creates a new IntervalTask (and doesn't run it - call SetTimerInterval() to start it). taskAction format: context => { /* do work */ } If a task has already been created, throws a FieldAccessException.

Dispose ( ) : void

Stops the Timer, and informs the ASP.Net hosting environment that it doesn't need to wait on the IntervalTask to shut down.

SetInterval ( int interval ) : void

If the background task timer is running, changes its interval. If the timer isn't running, starts the timer (and so, the background task).

Stop ( bool immediate ) : void

Call if the app is shutting down. Should only be called by the ASP.Net container.

StopTimer ( ) : void

Stops the timer. If the background task is running when this is called, it's left be so it can finish it's work, but will not be woken up to start again until SetTimerInterval() is called with a positive value. Convenience method. This has the same effect as calling SetTimerInterval(Timeout.Infinite);

Protected Methods

Method Description
IntervalTask ( System.Action taskAction ) : System
intervalCallback ( ) : void
taskActionWrapper ( ) : void

Method Details

CreateTask() public static method

Creates a new IntervalTask (and doesn't run it - call SetTimerInterval() to start it). taskAction format: context => { /* do work */ } If a task has already been created, throws a FieldAccessException.
public static CreateTask ( System.Action taskAction ) : IntervalTask
taskAction System.Action An Action to be run on an interval
return IntervalTask

Dispose() public method

Stops the Timer, and informs the ASP.Net hosting environment that it doesn't need to wait on the IntervalTask to shut down.
public Dispose ( ) : void
return void

IntervalTask() protected method

protected IntervalTask ( System.Action taskAction ) : System
taskAction System.Action
return System

SetInterval() public method

If the background task timer is running, changes its interval. If the timer isn't running, starts the timer (and so, the background task).
public SetInterval ( int interval ) : void
interval int The timer interval in milliseconds.
return void

Stop() public method

Call if the app is shutting down. Should only be called by the ASP.Net container.
public Stop ( bool immediate ) : void
immediate bool ASP.Net sets this to false first, then to true the second /// call 30 seconds later.
return void

StopTimer() public method

Stops the timer. If the background task is running when this is called, it's left be so it can finish it's work, but will not be woken up to start again until SetTimerInterval() is called with a positive value. Convenience method. This has the same effect as calling SetTimerInterval(Timeout.Infinite);
public StopTimer ( ) : void
return void

intervalCallback() protected method

protected intervalCallback ( ) : void
return void

taskActionWrapper() protected method

protected taskActionWrapper ( ) : void
return void

Property Details

intervalTimer protected property

protected TimerInfo,Brass9.Threading intervalTimer
return TimerInfo

taskAction protected property

protected Action,System taskAction
return System.Action

taskThread protected property

protected Thread taskThread
return Thread