seagull
seagull

Reputation: 237

Below code upload files to ftp and return file and byte count, how to make it run parallel?

  private async Task Upload(Ftp ftpHost)
     {
         //var assetImages is List<FileInfo>  
         var uploadedOrderFileByteCount = 0;
         var uploadedOrderFileCount = 0;

         foreach (var fi in assetImages.Where(fi => fi.Exists))
         {
             uploadedOrderFileCount++;

             var count = ftp.Upload(fi);

             uploadedOrderFileByteCount += await count;
             fi.Delete();
         }
     }

Upvotes: 0

Views: 282

Answers (1)

Stephen Cleary
Stephen Cleary

Reputation: 456587

You can do simple async parallelism by using Task.WhenAll:

private async Task Upload(Ftp ftpHost)
{
   //var assetImages is List<FileInfo>  

   var uploadTasks = assetImages.Where(fi => fi.Exists).Select(async fi =>
   {
      var ret = await ftp.Upload(fi);
      fi.Delete();
      return ret;
   }).ToArray();
   var counts = await Task.WhenAll(uploadTasks);
   var uploadedOrderFileByteCount = counts.Sum();
   var uploadedOrderFileCount = counts.Count();
}

Upvotes: 1

Related Questions