bloomtom.DistinctQueueProcessor
1.1.3
See the version list below for details.
dotnet add package bloomtom.DistinctQueueProcessor --version 1.1.3
NuGet\Install-Package bloomtom.DistinctQueueProcessor -Version 1.1.3
<PackageReference Include="bloomtom.DistinctQueueProcessor" Version="1.1.3" />
<PackageVersion Include="bloomtom.DistinctQueueProcessor" Version="1.1.3" />
<PackageReference Include="bloomtom.DistinctQueueProcessor" />
paket add bloomtom.DistinctQueueProcessor --version 1.1.3
#r "nuget: bloomtom.DistinctQueueProcessor, 1.1.3"
#:package bloomtom.DistinctQueueProcessor@1.1.3
#addin nuget:?package=bloomtom.DistinctQueueProcessor&version=1.1.3
#tool nuget:?package=bloomtom.DistinctQueueProcessor&version=1.1.3
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. 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 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.