ブロックを入れるTask.WhenAll()
とtry-catch
うまくいかないようです。コードはすべての画像を ftp にアップロードする必要がありますが、1 つのアップロードが失敗すると (たとえば、画像ファイルが別のプロセスで開かれている場合)、全体uploadTasks
が停止し、counts
空になります。
private async Task Upload(Ftp ftpHost)
{
var images = GetFileInfo() // will get a List<FileInfo>
var uploadTasks = images.Where(fi => fi.Exists).Select(async fi =>
{
var ret = await ftp.Upload(fi,_cancellationTokenSource.Token);
fi.Delete();
return ret;
});
IEnumerable<int> counts = new List<int>();
try
{
counts = await Task.WhenAll(uploadTasks);
}
catch
{
//ignore to allow all upload complete
}
var uploadedOrderFileByteCount = counts.Sum();
var uploadedOrderFileCount = counts.Count();
}