/// <summary> /// Asynchronously releases resources owned by this <see cref="Claim"/>. /// </summary> /// <remarks> /// This method calls <see cref="IQueueingService.ReleaseClaimAsync"/> to release messages /// claimed by this claim. To prevent other subscribers from re-claiming the messages, make /// sure to delete the messages before calling <see cref="DisposeAsync"/>. /// </remarks> /// <param name="cancellationToken">The <see cref="CancellationToken"/> that the task will observe.</param> /// <returns>A <see cref="Task"/> object representing the asynchronous operation.</returns> public Task DisposeAsync(CancellationToken cancellationToken) { lock (_lock) { if (_releaseTask == null) { if (_messages.Length == 0) { _releaseTask = InternalTaskExtensions.CompletedTask(); } else { _releaseTask = _service.ReleaseClaimAsync(_queueName, this, cancellationToken); } } } return(_releaseTask); }