Skip to content

Commit 3d4dc1f

Browse files
committed
Reduced complexity of the loop
1 parent f2a6f0c commit 3d4dc1f

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

src/DotNext.Threading/Threading/Leases/LeaseConsumer.cs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -184,18 +184,14 @@ public async Task<TResult> ExecuteAsync<TResult>(Func<CancellationToken, Task<TR
184184
ArgumentNullException.ThrowIfNull(worker);
185185

186186
var exception = default(Exception?);
187-
var leaseToken = Token;
188-
var operationToken = token;
189-
var cts = operationToken.LinkTo(leaseToken);
190-
191-
var task = Fork(worker, operationToken);
187+
var task = Fork(worker, out var cts, out var leaseToken, token);
188+
var timerToken = task.AsCancellationToken();
192189
try
193190
{
194-
Task completedTask;
195191
do
196192
{
197-
completedTask = await Task.WhenAny(Task.Delay(Expiration.Value / 2, operationToken), task).ConfigureAwait(false);
198-
} while (!ReferenceEquals(completedTask, task) && await TryRenewAsync(token).ConfigureAwait(false));
193+
await Task.Delay(Expiration.Value / 2, timerToken).ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing);
194+
} while (!task.IsCompleted && await TryRenewAsync(token).ConfigureAwait(false));
199195
}
200196
catch (Exception e)
201197
{
@@ -222,6 +218,14 @@ public async Task<TResult> ExecuteAsync<TResult>(Func<CancellationToken, Task<TR
222218
{
223219
cts?.Dispose();
224220
}
221+
}
222+
223+
private Task<TResult> Fork<TResult>(Func<CancellationToken, Task<TResult>> worker, out LinkedCancellationTokenSource? cts,
224+
out CancellationToken leaseToken,
225+
CancellationToken token)
226+
{
227+
cts = token.LinkTo(leaseToken = Token);
228+
return Fork(worker, token);
225229

226230
static Task<TResult> Fork(Func<CancellationToken, Task<TResult>> function, CancellationToken token)
227231
=> Task.Run(() => function(token), token);

0 commit comments

Comments
 (0)