bloomtom.DistinctQueueProcessor
1.1.5
dotnet add package bloomtom.DistinctQueueProcessor --version 1.1.5
NuGet\Install-Package bloomtom.DistinctQueueProcessor -Version 1.1.5
<PackageReference Include="bloomtom.DistinctQueueProcessor" Version="1.1.5" />
paket add bloomtom.DistinctQueueProcessor --version 1.1.5
#r "nuget: bloomtom.DistinctQueueProcessor, 1.1.5"
// Install bloomtom.DistinctQueueProcessor as a Cake Addin #addin nuget:?package=bloomtom.DistinctQueueProcessor&version=1.1.5 // Install bloomtom.DistinctQueueProcessor as a Cake Tool #tool nuget:?package=bloomtom.DistinctQueueProcessor&version=1.1.5
Distinct Queue Processor
The indexed multi-thread queue.
This library was built to manage a large queue of long running parallel processes. Parallelization is easily configured and threading is managed internally. The queue is indexed in a library for fast lookups of running tasks, and to provide the ability to reject items which are already in queue.
Nuget Packages
Package Name | Target Framework | Version |
---|---|---|
DistinctQueueProcessor | .NET Standard 2.0 |
Usage
The main contents of this library are in a single abstract class, DQP.DistinctQueueProcessor<T>
. Create your own derivative class which overrides the following required methods:
Process(T item)
- Do your work here. This method is run on a threaded task.
Error(T item, Exception ex)
- Called when an exception is caught from
Process(T item)
. Throwing an exception here will kill the running worker so take care.
- Called when an exception is caught from
Also provided is an wrapper which takes Actions in the constructor. See the examples below for more detail.
Inheritance Example
Create a new class inheriting from DistinctQueueProcessor<T>
where T
is the type of object you want to enqueue.
class DqpExample : DistinctQueueProcessor<string>
{
protected override void Error(string item, Exception ex)
{
Console.Error.WriteLine(ex.ToString());
}
protected override void Process(string item)
{
// This will be run on a thread, so don't be surprised if messages print out-of-order.
Console.WriteLine(item);
}
}
You'd then use your class as follows:
var example = new DqpExample();
example.AddItem("Hello, world!");
Action Example
If inheriting from DistinctQueueProcessor
in a custom class is too heavy for your use case, ActionQueue
can be used instead. It's a simple wrapper around the base class which takes two action as constructor parameters.
var actionQueue = new ActionQueue<string>(
new Action<string>(x =>
{
Console.WriteLine(item);
}),
new Action<string, Exception>((x, ex) =>
{
Console.Error.WriteLine(ex.ToString());
}));
actionQueue.AddItem("Hello, world!");
Gotchas
Internally the queue is indexed using a Dictionary<string, T>
, where the key is T.ToString()
. Ensure your T
has a ToString
implementation which returns short unique values.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. 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 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. |
.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 was computed. |
.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.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.