Skip to content

Commit dd6e61d

Browse files
committed
Simplify attachment of the token
1 parent 4fa27d6 commit dd6e61d

File tree

2 files changed

+10
-12
lines changed

2 files changed

+10
-12
lines changed

src/DotNext.Threading/Threading/LinkedCancellationTokenSource.cs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@ namespace DotNext.Threading;
1313
/// </remarks>
1414
public abstract class LinkedCancellationTokenSource : CancellationTokenSource
1515
{
16-
private protected static readonly Action<object?, CancellationToken> CancellationCallback;
16+
private Atomic.Boolean status;
1717

18-
static LinkedCancellationTokenSource()
18+
private protected LinkedCancellationTokenSource() => CancellationOrigin = Token;
19+
20+
private protected CancellationTokenRegistration Attach(CancellationToken token)
1921
{
20-
CancellationCallback = OnCanceled;
21-
22+
return token.UnsafeRegister(OnCanceled, this);
23+
2224
static void OnCanceled(object? source, CancellationToken token)
2325
{
2426
Debug.Assert(source is LinkedCancellationTokenSource);
@@ -27,10 +29,6 @@ static void OnCanceled(object? source, CancellationToken token)
2729
}
2830
}
2931

30-
private Atomic.Boolean status;
31-
32-
private protected LinkedCancellationTokenSource() => CancellationOrigin = Token;
33-
3432
private void Cancel(CancellationToken token)
3533
{
3634
if (status.FalseToTrue())

src/DotNext.Threading/Threading/LinkedTokenSourceFactory.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ internal Linked2CancellationTokenSource(in CancellationToken token1, in Cancella
141141
Debug.Assert(token1.CanBeCanceled);
142142
Debug.Assert(token2.CanBeCanceled);
143143

144-
registration1 = token1.UnsafeRegister(CancellationCallback, this);
145-
registration2 = token2.UnsafeRegister(CancellationCallback, this);
144+
registration1 = Attach(token1);
145+
registration2 = Attach(token2);
146146
}
147147

148148
protected override void Dispose(bool disposing)
@@ -172,13 +172,13 @@ internal MultipleLinkedCancellationTokenSource(ReadOnlySpan<CancellationToken> t
172172
{
173173
if (token != first && token.CanBeCanceled)
174174
{
175-
writer.Add(token.UnsafeRegister(CancellationCallback, this));
175+
writer.Add(Attach(token));
176176
}
177177
}
178178

179179
if (first.CanBeCanceled && writer.WrittenCount > 0)
180180
{
181-
writer.Add(first.UnsafeRegister(CancellationCallback, this));
181+
writer.Add(Attach(first));
182182
}
183183

184184
registrations = writer.DetachOrCopyBuffer();

0 commit comments

Comments
 (0)