TaskHandler 1.0.3
There is a newer version of this package available.
See the version list below for details.
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
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#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
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
<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!
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 | Versions 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.
Initial release.