var*_*ian 2 c# azure task-parallel-library azure-storage-blobs async-await
我编写了一个简单的C#控制台应用程序来测量顺序下载20个Azure blob文件(每个图像大约3mb)的速度,并且也是并行的.
我的印象是并行下载文件会明显更快,但根据我的经验,它实际上需要更长的时间.以下是并行下载的代码:
List<Task> tasks = new List<Task>();
foreach (string blobName in blobNames)
{
Task t = Task.Run(() =>
{
CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName);
blockBlob.DownloadToFileAsync(blobName, FileMode.Create).Wait();
});
tasks.Add(t);
}
Task.WaitAll(tasks.ToArray());
Run Code Online (Sandbox Code Playgroud)
我是否接近这个错误,导致不必要的瓶颈或其他什么?或者我是否从根本上误解了并行的好处?
IMO,你不应该开始下载每个blob的新任务,因为这是一个I/O密集型操作而不是计算密集型操作.使用多个任务会增加管理任务的开销,而实际上却没有获得任何收益.
将您的代码更改为:
List<Task> tasks = new List<Task>();
foreach (string blobName in blobNames)
{
CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName);
tasks.Add(blockBlob.DownloadToFileAsync(blobName, FileMode.Create));
}
Task.WaitAll(tasks.ToArray());
Run Code Online (Sandbox Code Playgroud)
这将启动多个异步I/O请求,并且一旦从Azure blob-storage下载了所有blob,您的代码将继续.由于我们没有单独等待每个下载任务,所有下载同时进行.
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |