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.137 -- Release Build+241897d8e370542c4e111be073532bb8b8e15519
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