Skip to content

Commit 22381a9

Browse files
committed
Don't need cancellationtoken in these instances
1 parent da581c2 commit 22381a9

File tree

6 files changed

+42
-71
lines changed

6 files changed

+42
-71
lines changed

src/Abstract/IAsyncSingleton.cs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,6 @@ public interface IAsyncSingleton : IDisposable, IAsyncDisposable
3737
/// <exception cref="NullReferenceException"></exception>
3838
void InitSync(object[] objects);
3939

40-
/// <summary>
41-
/// <see cref="Init(object[])"/> should be used instead of this if possible. This method can block the calling thread! It's lazy; it's initialized only when retrieving. <para/>
42-
/// This can still be used with an async initialization func, but it will block on the func.
43-
/// </summary>
44-
/// <remarks>The initialization func needs to be set before calling this, either in the ctor or via the other methods</remarks>
45-
/// <exception cref="ObjectDisposedException"></exception>
46-
/// <exception cref="NullReferenceException"></exception>
47-
void InitSync(CancellationToken cancellationToken, params object[] objects);
48-
4940
/// <see cref="SetInitialization(Func{object})"/>
5041
void SetInitialization(Func<CancellationToken, object[], ValueTask<object>> func);
5142

src/Abstract/IAsyncSingleton{T}.cs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,6 @@ public interface IAsyncSingleton<T> : IDisposable, IAsyncDisposable
4141
[Pure]
4242
T GetSync(object[] objects);
4343

44-
/// <summary>
45-
/// <see cref="Get(object[])"/> should be used instead of this if possible. This method can block the calling thread! It's lazy; it's initialized only when retrieving. <para/>
46-
/// This can still be used with an async initialization func, but it will block on the func.
47-
/// </summary>
48-
/// <remarks>The initialization func needs to be set before calling this, either in the ctor or via the other methods</remarks>
49-
/// <exception cref="ObjectDisposedException"></exception>
50-
/// <exception cref="NullReferenceException"></exception>
51-
[Pure]
52-
T GetSync(CancellationToken cancellationToken, params object[] objects);
53-
5444
/// <see cref="SetInitialization(Func{T})"/>
5545
void SetInitialization(Func<CancellationToken, object[], ValueTask<T>> func);
5646

src/AsyncSingleton.cs

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -93,32 +93,32 @@ private async ValueTask<object> InitInternal(CancellationToken cancellationToken
9393
switch (_initializationType)
9494
{
9595
case InitializationType.AsyncObject:
96-
if (_asyncObjectFunc == null)
96+
if (_asyncObjectFunc is null)
9797
throw new NullReferenceException(Constants.InitializationFuncError);
9898

9999
return await _asyncObjectFunc(objects).NoSync();
100100
case InitializationType.AsyncObjectToken:
101-
if (_asyncObjectTokenFunc == null)
101+
if (_asyncObjectTokenFunc is null)
102102
throw new NullReferenceException(Constants.InitializationFuncError);
103103

104104
return await _asyncObjectTokenFunc(cancellationToken, objects).NoSync();
105105
case InitializationType.Async:
106-
if (_asyncFunc == null)
106+
if (_asyncFunc is null)
107107
throw new NullReferenceException(Constants.InitializationFuncError);
108108

109109
return await _asyncFunc().NoSync();
110110
case InitializationType.SyncObject:
111-
if (_objectFunc == null)
111+
if (_objectFunc is null)
112112
throw new NullReferenceException(Constants.InitializationFuncError);
113113

114114
return _objectFunc(objects);
115115
case InitializationType.SyncObjectToken:
116-
if (_objectTokenFunc == null)
116+
if (_objectTokenFunc is null)
117117
throw new NullReferenceException(Constants.InitializationFuncError);
118118

119119
return _objectTokenFunc(cancellationToken, objects);
120120
case InitializationType.Sync:
121-
if (_func == null)
121+
if (_func is null)
122122
throw new NullReferenceException(Constants.InitializationFuncError);
123123

124124
return _func();
@@ -128,58 +128,53 @@ private async ValueTask<object> InitInternal(CancellationToken cancellationToken
128128
}
129129

130130
public void InitSync(params object[] objects)
131-
{
132-
InitSync(CancellationToken.None, objects);
133-
}
134-
135-
public void InitSync(CancellationToken cancellationToken, params object[] objects)
136131
{
137132
if (_disposed)
138133
throw new ObjectDisposedException(nameof(AsyncSingleton));
139134

140135
if (_instance is not null)
141136
return;
142137

143-
using (_lock.Lock(cancellationToken))
138+
using (_lock.Lock())
144139
{
145140
if (_instance is not null)
146141
return;
147142

148-
_instance = InitSyncInternal(cancellationToken, objects);
143+
_instance = InitSyncInternal(objects);
149144
}
150145
}
151146

152-
private object InitSyncInternal(CancellationToken cancellationToken, params object[] objects)
147+
private object InitSyncInternal(params object[] objects)
153148
{
154149
switch (_initializationType)
155150
{
156151
case InitializationType.AsyncObject:
157-
if (_asyncObjectFunc == null)
152+
if (_asyncObjectFunc is null)
158153
throw new NullReferenceException(Constants.InitializationFuncError);
159154

160155
return _asyncObjectFunc(objects).NoSync().GetAwaiter().GetResult();
161156
case InitializationType.AsyncObjectToken:
162-
if (_asyncObjectTokenFunc == null)
157+
if (_asyncObjectTokenFunc is null)
163158
throw new NullReferenceException(Constants.InitializationFuncError);
164159

165-
return _asyncObjectTokenFunc(cancellationToken, objects).NoSync().GetAwaiter().GetResult();
160+
return _asyncObjectTokenFunc(CancellationToken.None, objects).NoSync().GetAwaiter().GetResult();
166161
case InitializationType.Async:
167-
if (_asyncFunc == null)
162+
if (_asyncFunc is null)
168163
throw new NullReferenceException(Constants.InitializationFuncError);
169164

170165
return _asyncFunc().NoSync().GetAwaiter().GetResult();
171166
case InitializationType.SyncObject:
172-
if (_objectFunc == null)
167+
if (_objectFunc is null)
173168
throw new NullReferenceException(Constants.InitializationFuncError);
174169

175170
return _objectFunc(objects);
176171
case InitializationType.SyncObjectToken:
177-
if (_objectTokenFunc == null)
172+
if (_objectTokenFunc is null)
178173
throw new NullReferenceException(Constants.InitializationFuncError);
179174

180-
return _objectTokenFunc(cancellationToken, objects);
175+
return _objectTokenFunc(CancellationToken.None, objects);
181176
case InitializationType.Sync:
182-
if (_func == null)
177+
if (_func is null)
183178
throw new NullReferenceException(Constants.InitializationFuncError);
184179

185180
return _func();
@@ -252,7 +247,7 @@ public void Dispose()
252247
// Capture the instance into a local variable to avoid multiple volatile field accesses.
253248
object? localInstance = _instance;
254249

255-
if (localInstance != null)
250+
if (localInstance is not null)
256251
{
257252
// Explicit conditional checks for better predictability in JIT compilation.
258253
if (localInstance is IDisposable disposable)
@@ -281,7 +276,7 @@ public async ValueTask DisposeAsync()
281276

282277
object? localInstance = _instance;
283278

284-
if (localInstance == null)
279+
if (localInstance is null)
285280
{
286281
GC.SuppressFinalize(this);
287282
return;

src/AsyncSingleton{T}.cs

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -112,32 +112,32 @@ private async ValueTask<T> GetInternal(CancellationToken cancellationToken, para
112112
switch (_initializationType)
113113
{
114114
case InitializationType.AsyncObject:
115-
if (_asyncObjectFunc == null)
115+
if (_asyncObjectFunc is null)
116116
throw new NullReferenceException(Constants.InitializationFuncError);
117117

118118
return await _asyncObjectFunc(objects).NoSync();
119119
case InitializationType.AsyncObjectToken:
120-
if (_asyncObjectTokenFunc == null)
120+
if (_asyncObjectTokenFunc is null)
121121
throw new NullReferenceException(Constants.InitializationFuncError);
122122

123123
return await _asyncObjectTokenFunc(cancellationToken, objects).NoSync();
124124
case InitializationType.Async:
125-
if (_asyncFunc == null)
125+
if (_asyncFunc is null)
126126
throw new NullReferenceException(Constants.InitializationFuncError);
127127

128128
return await _asyncFunc().NoSync();
129129
case InitializationType.SyncObject:
130-
if (_objectFunc == null)
130+
if (_objectFunc is null)
131131
throw new NullReferenceException(Constants.InitializationFuncError);
132132

133133
return _objectFunc(objects);
134134
case InitializationType.SyncObjectToken:
135-
if (_objectTokenFunc == null)
135+
if (_objectTokenFunc is null)
136136
throw new NullReferenceException(Constants.InitializationFuncError);
137137

138138
return _objectTokenFunc(cancellationToken, objects);
139139
case InitializationType.Sync:
140-
if (_func == null)
140+
if (_func is null)
141141
throw new NullReferenceException(Constants.InitializationFuncError);
142142

143143
return _func();
@@ -147,62 +147,57 @@ private async ValueTask<T> GetInternal(CancellationToken cancellationToken, para
147147
}
148148

149149
public T GetSync(params object[] objects)
150-
{
151-
return GetSync(CancellationToken.None, objects);
152-
}
153-
154-
public T GetSync(CancellationToken cancellationToken, params object[] objects)
155150
{
156151
if (_disposed)
157152
throw new ObjectDisposedException(typeof(AsyncSingleton<T>).Name);
158153

159154
if (_instance is not null)
160155
return _instance;
161156

162-
using (_lock.Lock(cancellationToken))
157+
using (_lock.Lock())
163158
{
164159
if (_instance is not null)
165160
return _instance;
166161

167-
_instance = GetSyncInternal(cancellationToken, objects);
162+
_instance = GetSyncInternal(objects);
168163
return _instance;
169164
}
170165
}
171166

172-
private T GetSyncInternal(CancellationToken cancellationToken, params object[] objects)
167+
private T GetSyncInternal(params object[] objects)
173168
{
174169
switch (_initializationType)
175170
{
176171
case InitializationType.AsyncObject:
177-
if (_asyncObjectFunc == null)
172+
if (_asyncObjectFunc is null)
178173
throw new NullReferenceException(Constants.InitializationFuncError);
179174

180175
// Not a great situation here - we only have async initialization but we're calling this synchronously... so we'll block
181176
return _asyncObjectFunc(objects).NoSync().GetAwaiter().GetResult();
182177
case InitializationType.AsyncObjectToken:
183-
if (_asyncObjectTokenFunc == null)
178+
if (_asyncObjectTokenFunc is null)
184179
throw new NullReferenceException(Constants.InitializationFuncError);
185180

186181
// Not a great situation here - we only have async initialization but we're calling this synchronously... so we'll block
187-
return _asyncObjectTokenFunc(cancellationToken, objects).NoSync().GetAwaiter().GetResult();
182+
return _asyncObjectTokenFunc(CancellationToken.None, objects).NoSync().GetAwaiter().GetResult();
188183
case InitializationType.Async:
189-
if (_asyncFunc == null)
184+
if (_asyncFunc is null)
190185
throw new NullReferenceException(Constants.InitializationFuncError);
191186

192187
// Not a great situation here - we only have async initialization but we're calling this synchronously... so we'll block
193188
return _asyncFunc().NoSync().GetAwaiter().GetResult();
194189
case InitializationType.SyncObject:
195-
if (_objectFunc == null)
190+
if (_objectFunc is null)
196191
throw new NullReferenceException(Constants.InitializationFuncError);
197192

198193
return _objectFunc(objects);
199194
case InitializationType.SyncObjectToken:
200-
if (_objectTokenFunc == null)
195+
if (_objectTokenFunc is null)
201196
throw new NullReferenceException(Constants.InitializationFuncError);
202197

203-
return _objectTokenFunc(cancellationToken, objects);
198+
return _objectTokenFunc(CancellationToken.None, objects);
204199
case InitializationType.Sync:
205-
if (_func == null)
200+
if (_func is null)
206201
throw new NullReferenceException(Constants.InitializationFuncError);
207202

208203
return _func();
@@ -219,7 +214,7 @@ public void SetInitialization(Func<object[], ValueTask<T>> func)
219214
_initializationType = InitializationType.AsyncObject;
220215
_asyncObjectFunc = func;
221216
}
222-
217+
223218
public void SetInitialization(Func<CancellationToken, object[], ValueTask<T>> func)
224219
{
225220
if (_instance is not null)
@@ -274,7 +269,7 @@ public void Dispose()
274269

275270
T? localInstance = _instance;
276271

277-
if (localInstance == null)
272+
if (localInstance is null)
278273
{
279274
GC.SuppressFinalize(this);
280275
return;
@@ -305,7 +300,7 @@ public async ValueTask DisposeAsync()
305300

306301
T? localInstance = _instance;
307302

308-
if (localInstance == null)
303+
if (localInstance is null)
309304
{
310305
GC.SuppressFinalize(this);
311306
return;

src/Enums/InitializationType.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace Soenneker.Utils.AsyncSingleton.Enums;
22

3-
public enum InitializationType : byte
3+
public enum InitializationType
44
{
55
AsyncObjectToken,
66
SyncObjectToken,

test/Soenneker.Utils.AsyncSingleton.Tests/Soenneker.Utils.AsyncSingleton.Tests.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<TargetFramework>net9.0</TargetFramework>
@@ -16,7 +16,7 @@
1616
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1717
<PrivateAssets>all</PrivateAssets>
1818
</PackageReference>
19-
<PackageReference Include="Soenneker.Tests.Unit" Version="3.0.715" />
19+
<PackageReference Include="Soenneker.Tests.Unit" Version="3.0.718" />
2020
<PackageReference Include="xUnit.v3" Version="1.1.0" />
2121
</ItemGroup>
2222

0 commit comments

Comments
 (0)