TaskHandler 1.0.9
dotnet add package TaskHandler --version 1.0.9
NuGet\Install-Package TaskHandler -Version 1.0.9
<PackageReference Include="TaskHandler" Version="1.0.9" />
<PackageVersion Include="TaskHandler" Version="1.0.9" />
<PackageReference Include="TaskHandler" />
paket add TaskHandler --version 1.0.9
#r "nuget: TaskHandler, 1.0.9"
#addin nuget:?package=TaskHandler&version=1.0.9
#tool nuget:?package=TaskHandler&version=1.0.9
<img src="https://raw.githubusercontent.com/jchristn/TaskHandler/main/Assets/logo.png" width="250" height="250">
TaskHandler
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!
async (CancellationToken token) => { // your task in form of Func<CancellationToken, Task>
Console.WriteLine("Task 1 starting!");
await Task.Delay(10000, token);
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!
async (CancellationToken token) => { // your task in form of Func<CancellationToken, Task>
Console.WriteLine("Task 2 starting!");
await Task.Delay(5000, token);
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;
CancellationTokenSource tokenSource = new CancellationTokenSource();
CancellationToken token = tokenSource.Token;
//
// task without cancellation token and no return value
//
Func<Task<string>> task = async () =>
{
return "Hello, world!";
};
result = await TaskRunWithTimeout.Go(task, 2500, tokenSource); // "Hello, world!"
//
// task with cancellation token and return value
//
Func<CancellationToken, Task<string>> task = async (CancellationToken token) =>
{
for (int i = 0; i < 25; i++) // wait 2.5 seconds in total
{
await Task.Delay(100);
token.ThrowIfCancellationRequested(); // check for cancellation
}
return "Hello, world!";
};
result = await TaskRunWithTimeout.Go(task(token), 500, tokenSource); // throws TimeoutException
result = await TaskRunWithTimeout.Go(task(token), 5000, tokenSource); // "Hello, world!"
// task with cancellation token, input parameter, and return value
Func<string, CancellationToken, Task<string>> task2 = async (string text, CancellationToken token) =>
{
return text;
};
result = await TaskRunWithTimeout.Go(task2("hello world", token), 2500, tokenSource);
Version History
Please refer to CHANGELOG.md for version history.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. 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 was computed. 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 is compatible. 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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
-
.NETStandard 2.1
- No dependencies.
-
net6.0
- No dependencies.
-
net8.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on TaskHandler:
Package | Downloads |
---|---|
View.Models
Database models, services, and supporting classes for for View AI. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Retarget to include net8.0.