From e1a3c992229f6ea3cacf7e58b8e927f39b736141 Mon Sep 17 00:00:00 2001 From: Lilith River Date: Tue, 27 Feb 2024 05:28:43 -0700 Subject: [PATCH] Improve new BasicAsyncLock APIs --- src/Imazen.Common/Concurrency/BasicAsyncLock.cs | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/Imazen.Common/Concurrency/BasicAsyncLock.cs b/src/Imazen.Common/Concurrency/BasicAsyncLock.cs index 403919c8..cab7d974 100644 --- a/src/Imazen.Common/Concurrency/BasicAsyncLock.cs +++ b/src/Imazen.Common/Concurrency/BasicAsyncLock.cs @@ -10,18 +10,10 @@ public BasicAsyncLock() releaser = Task.FromResult((IDisposable)new Releaser(this)); } - public Task LockAsync(CancellationToken cancellationToken = default) + public Task LockAsync() => LockAsyncWithTimeout(Timeout.Infinite, CancellationToken.None); + public Task LockAsyncWithTimeout(int timeoutMilliseconds = Timeout.Infinite, CancellationToken cancellationToken = default) { - var wait = semaphore.WaitAsync(cancellationToken); - return wait.IsCompleted ? - releaser : - wait.ContinueWith((_, state) => (IDisposable)state!, - releaser.Result, CancellationToken.None, - TaskContinuationOptions.ExecuteSynchronously, TaskScheduler.Default); - } - public Task LockAsync(TimeSpan timeout, CancellationToken cancellationToken = default) - { - var wait = semaphore.WaitAsync(timeout, cancellationToken); + var wait = semaphore.WaitAsync(timeoutMilliseconds, cancellationToken); return wait.IsCompleted ? releaser : wait.ContinueWith((_, state) => (IDisposable)state!,