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.166 -- Release Build+55b93eb16d4a5b73f01a183dc992e29d98627d25
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.

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.

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