发布
社区首页 >问答首页 >Task.WhenAll写入blob失败或无法完成

Task.WhenAll写入blob失败或无法完成
EN

Stack Overflow用户
提问于 2019-05-02 10:20:43
回答 1查看 79关注 0票数 0

当使用Task.WhenAll(列表)将大约200个300k的blob写入blob存储时,写入挂起/花费的时间明显长于按顺序执行每个写入。

我在一个函数应用程序中运行该进程。

不起作用

代码语言:javascript
代码运行次数:0
复制
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());
        }

工作速度明显更快(但不应该如此)

代码语言:javascript
代码运行次数:0
复制
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());
        }
EN

回答 1

Stack Overflow用户

发布于 2019-05-03 00:12:58

它正在变慢并失败,因为它无法处理200个并发请求。

考虑使用SemaphorSlim来使用其内置的节流机制,并将并发请求限制在更合理的数量。

请看这篇文章:How to limit the amount of concurrent async I/O operations?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55944905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档