TaskHandler 1.0.3

There is a newer version of this package available.
See the version list below for details.
dotnet add package TaskHandler --version 1.0.3                
NuGet\Install-Package TaskHandler -Version 1.0.3                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="TaskHandler" Version="1.0.3" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add TaskHandler --version 1.0.3                
#r "nuget: TaskHandler, 1.0.3"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install TaskHandler as a Cake Addin
#addin nuget:?package=TaskHandler&version=1.0.3

// Install TaskHandler as a Cake Tool
#tool nuget:?package=TaskHandler&version=1.0.3                

<img src="https://raw.githubusercontent.com/jchristn/TaskHandler/main/Assets/logo.png" width="250" height="250">

TaskHandler

NuGet Version NuGet

A simple C# class library to help manage running a queue of tasks without relinquishing control.

New in v1.0.x

  • Initial release

Feedback or Issues

Encounter a bug? Think of a way this library could be even better? Please file an issue here!

Test App

Please refer to the Test project for a full example of how to exercise the class library.

Example

using TaskHandler;

TaskQueue queue = new TaskQueue();      // allow up to 32 concurrent tasks
TaskQueue queue = new TaskQueue(16);    // allow up to 16 concurrent tasks

queue.AddTask(
  Guid.NewGuid(),                       // unique identifier
  "Task 1",                             // name for the task
  new Dictionary<string, object>(),     // any metadata you like!
  delegate(CancellationToken token) {   // your task in form of Action<CancellationToken>
  	Console.WriteLine("Task 1 starting!");
  	Task.Delay(10000).Wait();
  	Console.WriteLine("Task 1 ending!");
  });

queue.AddTask(
  Guid.NewGuid(),                       // unique identifier
  "Task 2",                             // name for the task
  new Dictionary<string, object>(),     // any metadata you like!
  delegate(CancellationToken token) {   // your task in form of Action<CancellationToken>
  	Console.WriteLine("Task 2 starting!");
  	Task.Delay(5000).Wait();
  	Console.WriteLine("Task 2 ending!");
  });

queue.Start();
Console.WriteLine(queue.RunningCount);  // Integer, the number of running tasks
queue.Stop([guid]);                     // Cancel a specific task
queue.Stop();                           // Cancel all tasks

For Control Freaks

queue.Logger = Console.WriteLine;       // For debug messages
queue.OnTaskAdded += ...                // When a task is added
queue.OnTaskStarted += ...              // When a task starts
queue.OnTaskFinished += ...             // When a task finishes
queue.OnTaskFaulted += ...              // When a task faults
queue.OnTaskCanceled += ...             // When a task is canceled
queue.OnProcessingStarted += ...        // When the task queue is started
queue.OnProcessingStopped += ...        // When the task queue is stopped

Run a Task with a Timeout

string result;

result = await TaskRunWithTimeout.Go(
    Task.Run(async () =>
    { 
        await Task.Delay(1000); 
        return "hello!";
    }), 
    2500); 
// hello!

result = await TaskRunWithTimeout.Go(
    Task.Run(async () =>
    { 
        await Task.Delay(5000); 
        return "hello!"; 
    }), 
    2500);
// TimeoutException thrown

Version History

Please refer to CHANGELOG.md for version history.

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net6.0

    • No dependencies.
  • net7.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.6 157 1/31/2024
1.0.5 240 10/21/2023
1.0.3 274 10/8/2023
1.0.2 160 10/8/2023
1.0.1 277 10/1/2023
1.0.0 144 9/29/2023

Initial release.