Я изменил свой код и удалил Parallel.ForEach
вместо этого, используя foreach
l oop для перебора файлов. Но сейчас я не могу найти все файлы по пути загрузки, хотя в журналах показываются все файлы, которые были загружены. Количество загруженных файлов в пути загрузки изменяется, и это поведение кажется случайным. Могу ли я использовать Task.Run
для операций ввода-вывода?
var tasks = new List<Task>();
foreach (var objectName in listFiles)
{
var task = Task.Run(() =>
{
downloadSuccess = false;
bucketFileName = Path.GetFileName(objectName.Name);
guidFolderPath = tempFolderLocation + "\\" + bucketFileName;
var maxRetryAttempts = 3;
var pauseBetweenFailures = TimeSpan.FromSeconds(2);
RetryHelper.RetryOnException(maxRetryAttempts, pauseBetweenFailures, async () =>
{
FileStream fs = new FileStream(guidFolderPath, FileMode.Create,
FileAccess.Write, FileShare.Write);
using (fs)
{
var progress = new Progress<IDownloadProgress>(
p =>
{
DownloadProgress(p, retryCount, objectName.Name);
});
await client.DownloadObjectAsync(bucketName, objectName.Name,
fs, option, cancellationToken.Token, progress);
}
});
});
tasks.Add(task);
}
await Task.WhenAll(tasks);