public static async Task<bool> TryUsingAsync(this ILockProvider locker, string name, Func<Task> work, TimeSpan? lockTimeout = null, CancellationToken cancellationToken = default(CancellationToken)) { using (var l = await locker.AcquireAsync(name, lockTimeout, cancellationToken).AnyContext()) { if (l != null) { await work().AnyContext(); return true; } } return false; }
public static async Task<bool> TryUsingAsync(this ILockProvider locker, string name, Func<Task> work, TimeSpan? lockTimeout = null, CancellationToken cancellationToken = default(CancellationToken)) { var l = await locker.AcquireAsync(name, lockTimeout, cancellationToken).AnyContext(); if (l == null) return false; try { await work().AnyContext(); } finally { await l.ReleaseAsync().AnyContext(); } return true; }
public static Task<ILock> AcquireAsync(this ILockProvider provider, string name, TimeSpan? lockTimeout = null, TimeSpan? acquireTimeout = null) { return provider.AcquireAsync(name, lockTimeout, acquireTimeout.ToCancellationToken(acquireTimeout ?? TimeSpan.FromSeconds(30))); }
public static async Task TryUsingAsync(this ILockProvider locker, string name, Func<Task> work, TimeSpan? lockTimeout = null, TimeSpan? acquireTimeout = null) { var cancellationToken = acquireTimeout?.ToCancellationToken() ?? default(CancellationToken); using (var l = await locker.AcquireAsync(name, lockTimeout, cancellationToken).AnyContext()) if (l != null) await work().AnyContext(); }
public static async Task TryUsingAsync(this ILockProvider locker, string name, Func<CancellationToken, Task> work, TimeSpan? lockTimeout = null, CancellationToken cancellationToken = default(CancellationToken)) { using (var l = await locker.AcquireAsync(name, lockTimeout, cancellationToken).AnyContext()) if (l != null) await work(cancellationToken).AnyContext(); }