Soenneker.Queues.Intrusive.Abstractions
4.0.22
Prefix Reserved
dotnet add package Soenneker.Queues.Intrusive.Abstractions --version 4.0.22
NuGet\Install-Package Soenneker.Queues.Intrusive.Abstractions -Version 4.0.22
<PackageReference Include="Soenneker.Queues.Intrusive.Abstractions" Version="4.0.22" />
<PackageVersion Include="Soenneker.Queues.Intrusive.Abstractions" Version="4.0.22" />
<PackageReference Include="Soenneker.Queues.Intrusive.Abstractions" />
paket add Soenneker.Queues.Intrusive.Abstractions --version 4.0.22
#r "nuget: Soenneker.Queues.Intrusive.Abstractions, 4.0.22"
#:package Soenneker.Queues.Intrusive.Abstractions@4.0.22
#addin nuget:?package=Soenneker.Queues.Intrusive.Abstractions&version=4.0.22
#tool nuget:?package=Soenneker.Queues.Intrusive.Abstractions&version=4.0.22
Soenneker.Queues.Intrusive.Abstractions
Defines the forward-link contract used by Soenneker intrusive queues and provides a reusable node base class.
An intrusive queue stores linkage on the queued object itself. This avoids allocating a separate wrapper node, but it also means the queue owns that link while the object is enqueued.
Install
dotnet add package Soenneker.Queues.Intrusive.Abstractions
Define a node
The simplest implementation derives from IntrusiveNode<TNode>:
using Soenneker.Queues.Intrusive.Abstractions;
public sealed class WorkItem : IntrusiveNode<WorkItem>
{
public required string Payload { get; init; }
}
Use IIntrusiveNode<TNode> directly when the type already has its own base class:
public sealed class WorkItem : IIntrusiveNode<WorkItem>
{
private WorkItem? _next;
public ref WorkItem? Next => ref _next;
}
Next must return a reference to a real, stable field. Lock-free queue implementations use that storage with Volatile and Interlocked; a computed value or temporary does not satisfy the contract.
Ownership rules
- Do not read or write
Nextwhile the node is owned by a queue. - Do not enqueue the same node twice, concurrently, or into two intrusive structures at once.
- Reuse a node only after the owning queue has removed it.
- Expect queue implementations to clear
Nextduring enqueue, dequeue, or reuse preparation.
Violating these rules can corrupt queue linkage. The abstractions intentionally do not add per-node state or runtime checks that would change the lock-free data structure’s cost model.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. 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. |
-
net10.0
- No dependencies.
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Soenneker.Queues.Intrusive.Abstractions:
| Package | Downloads |
|---|---|
|
Soenneker.Queues.Intrusive.ValueMpsc
Provides a high performance mpsc intrusive queue primitive |
|
|
Soenneker.Queues.Intrusive.Mpsc
Provides a high performance mpsc intrusive queue primitive |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.0.22 | 3,751 | 9/15/2026 |
| 4.0.21 | 55,072 | 9/12/2026 |
| 4.0.20 | 279,177 | 8/30/2026 |
| 4.0.19 | 33,553 | 8/29/2026 |
| 4.0.18 | 96 | 8/29/2026 |
| 4.0.17 | 372,957 | 7/28/2026 |
| 4.0.16 | 120,674 | 7/18/2026 |
| 4.0.15 | 268,215 | 6/18/2026 |
| 4.0.14 | 214,442 | 6/5/2026 |
| 4.0.13 | 121 | 6/5/2026 |
| 4.0.12 | 270,172 | 4/23/2026 |
| 4.0.11 | 241,944 | 3/12/2026 |
| 4.0.10 | 131 | 3/12/2026 |
| 4.0.8 | 224 | 3/12/2026 |
| 4.0.7 | 76,487 | 3/10/2026 |
| 4.0.6 | 24,375 | 3/9/2026 |
| 4.0.5 | 130 | 3/9/2026 |
| 4.0.4 | 133 | 3/9/2026 |
| 4.0.2 | 283,035 | 2/4/2026 |
| 4.0.1 | 146 | 2/4/2026 |
Update dependency dotnet-sdk to v10.0.401 (#173)
Automatically merged