Проблема:Я хотел бы загрузить 100 файлов параллельно с AWS S3, используя их.NET SDK. Скачанный контент должен храниться в 100 потоках памяти (файлы достаточно маленькие, и я могу взять его оттуда ). Я путаюсь между Task, IAsyncResult, Parallel. *и другие различные подходы в.NET 4.0.
Если я попытаюсь решить проблему самостоятельно , то навскидку представлю что-то вроде этого псевдокода: (отредактированного для добавления типов к некоторым переменным)
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
AmazonS3 _s3 =...;
IEnumerable<GetObjectRequest> requestObjects =...;
// Prepare to launch requests
var asyncRequests = from rq in requestObjects
select _s3.BeginGetObject(rq,null,null);
// Launch requests
var asyncRequestsLaunched = asyncRequests.ToList();
// Prepare to finish requests
var responses = from rq in asyncRequestsLaunched
select _s3.EndGetRequest(rq);
// Finish requests
var actualResponses = responses.ToList();
// Fetch data
var data = actualResponses.Select(rp => {
var ms = new MemoryStream();
rp.ResponseStream.CopyTo(ms);
return ms;
});
Этот код запускает 100 запросов параллельно, т.е. хорошо. Однако есть две проблемы:
И тут я начинаю думать, что иду по ложному пути...
Помочь?