Beispiel #1
0
        private Task <bool> ExistsAsync(bool retryOnNotExists, CancellationToken cancellationToken)
        => Dependencies.ExecutionStrategyFactory.Create().ExecuteAsync(
            DateTime.UtcNow + RetryTimeout, async(giveUp, ct) =>
        {
            while (true)
            {
                try
                {
                    using (new TransactionScope(TransactionScopeOption.Suppress, TransactionScopeAsyncFlowOption.Enabled))
                    {
                        await _connection.OpenAsync(ct, errorsExpected: true);

                        await _connection.CloseAsync();
                    }

                    return(true);
                }
                catch (SqlException e)
                {
                    if (!retryOnNotExists &&
                        IsDoesNotExist(e))
                    {
                        return(false);
                    }

                    if (DateTime.UtcNow > giveUp ||
                        !RetryOnExistsFailure(e))
                    {
                        throw;
                    }

                    await Task.Delay(RetryDelay, ct);
                }
            }
        }, cancellationToken);