我无法AmazonS3Client.GetObject
并行下载文件。代码如下:
public async Task<string> ReadFile(string filename)
{
string filePath = config.RootFolderPath + filename;
var sw = Stopwatch.StartNew();
Console.WriteLine(filePath + " - start");
using (var response = await s3Client.GetObjectAsync(config.Bucket, filePath))
{
Console.WriteLine(filePath + " - request - " + sw.ElapsedMilliseconds);
using (var reader = new StreamReader(response.ResponseStream))
{
return await reader.ReadToEndAsync();
}
}
}
这就是这样的:
var tasks = (from file in files select ReadFile(file)).ToArray();
await Task.WhenAll(tasks);
这导致请求按顺序返回(尽管不是按顺序)。我读了大约50个小文件,因此最后一次读取时方法GetObjectAsync
大约需要25秒。相反,我希望我能在2-3秒内读取50个文件。
我已经验证过:
ConfigureAwait(false)
,但这并没有像预期的那样有所作为。AmazonS3Client
进行各种设置,例如使用HTTP协议或更改缓冲区大小。没有成功。