AsyncLockTryEnterAsync(TimeSpan) Method

Attempts to obtain exclusive access to the lock.

Definition

Namespace: Gemstone.Threading
Assembly: Gemstone.Threading (in Gemstone.Threading.dll) Version: 1.0.128 -- Release Build+d4a9a653be1def5888b9be91bb1825c8655f3529
public Task<IDisposable> TryEnterAsync(
	TimeSpan timeout
)

Parameters

timeout  TimeSpan
The amount of time to wait before failing to take the lock.

Return Value

TaskIDisposable
A task that, if cancelled, indicates the lock was not taken, and must be awaited to obtain the token that will release the lock on Dispose.

Remarks

The following illustrates an example of using try-catch to detect a failure to take the lock.

C#
AsyncLock asyncLock = new AsyncLock();

try
{
    using IDisposable token = await asyncLock.TryEnterAsync();
    // Critical region
}
catch (TaskCanceledException)
{
    // Lock failed
}

The following illustrates an example of using ContinueWithTResult(FuncTask, TResult) to detect a failure to take the lock.

C#
AsyncLock asyncLock = new AsyncLock();

await asyncLock.TryEnterAsync().ContinueWith(async tokenTask =>
{
    if (tokenTask.IsCanceled)
    {
        // Lock failed
        return;
    }

    using IDisposable token = await tokenTask;
    // Critical region
}).Unwrap();

Exceptions

TaskCanceledExceptionThe timeout expires before the lock could be taken.

See Also