public async Task DeleteVersions(IEnumerable <PublishedProvider> publishedProviders)
        {
            Guard.ArgumentNotNull(publishedProviders, nameof(publishedProviders));

            IEnumerable <KeyValuePair <string, PublishedProviderVersion> > versionsToDelete = publishedProviders.Select(m =>
                                                                                                                        new KeyValuePair <string, PublishedProviderVersion>(m.PartitionKey, m.Current));

            List <Task>   allTasks  = new List <Task>();
            SemaphoreSlim throttler = new SemaphoreSlim(initialCount: _publishingEngineOptions.PublishedProviderSaveVersionsConcurrencyCount);

            foreach (var versions in versionsToDelete.ToBatches(10))
            {
                await throttler.WaitAsync();

                allTasks.Add(
                    Task.Run(async() =>
                {
                    try
                    {
                        try
                        {
                            await _versionRepositoryPolicy.ExecuteAsync(() => _versionRepository.DeleteVersions(versions));
                        }
                        catch (Exception ex)
                        {
                            _logger.Error(ex, "Failed to delete published provider versions");

                            throw;
                        }
                    }
                    finally
                    {
                        throttler.Release();
                    }
                }));
            }
            await TaskHelper.WhenAllAndThrow(allTasks.ToArray());
        }