Задача. Когда все записи в blob не закрываются или не завершаются - PullRequest
0 голосов
/ 02 мая 2019

При записи около 200 300 тыс. Больших двоичных объектов в хранилище больших двоичных объектов с помощью Task.WhenAll (Список) записи зависают / занимают значительно больше времени, чем выполнение каждого по порядку.

Я запускаю процесс в приложении-функции.

Не работает

private async Task WriteToBlobAsync(List<DataSeries> allData)
        {
            int blobCount = 0;
            List<Task> blobWriteTasks = new List<Task>();
            foreach(DataSeries series in allData)
            {
                blobCount++;
                string seriesInJson = JsonConvert.SerializeObject(series);
                blobWriteTasks.Add(_destinationBlobStore.WriteBlobAsync(seriesInJson, series.SaveName));
                //await _destinationBlobStore.WriteBlobAsync(seriesInJson, series.SaveName);
                if (blobCount % 100 == 0)
                {
                    _flightSummaryDoc.AddLog($"{blobCount} Blobs Complete");
                    _log.Info($"{blobCount} Blobs Complete");
                }
            }
            await Task.WhenAll(blobWriteTasks.ToArray());
        }

Работает значительно быстрее (но не должно)

private async Task WriteToBlobAsync(List<DataSeries> allData)
        {
            int blobCount = 0;
            List<Task> blobWriteTasks = new List<Task>();
            foreach(DataSeries series in allData)
            {
                blobCount++;
                string seriesInJson = JsonConvert.SerializeObject(series);
                //blobWriteTasks.Add(_destinationBlobStore.WriteBlobAsync(seriesInJson,series.SaveName));
                await _destinationBlobStore.WriteBlobAsync(seriesInJson, series.SaveName);
                if(blobCount % 100 == 0)
                {
                    _flightSummaryDoc.AddLog($"{blobCount} Blobs Complete");
                    _log.Info($"{blobCount} Blobs Complete");
                }
            }
            //await Task.WhenAll(blobWriteTasks.ToArray());
        }

1 Ответ

1 голос
/ 02 мая 2019

Он замедляется и перестает работать, потому что не может обработать 200 одновременных запросов.

Подумайте об использовании SemaphorSlim, чтобы использовать встроенный механизм регулирования и ограничьте число одновременных запросов более разумным числом.

См. Этот пост: Как ограничить количество одновременных запросовасинхронные операции ввода / вывода?

...