C# 下面的代码将文件上传到ftp并返回文件和字节数,如何使其并行运行? private异步任务上传(Ftp-ftpHost) { //var资产负债表 var uploadeOrderFileByteCount=0; var uploadedOrderFileCount=0; foreach(资产估值中的var fi,其中(fi=>fi.Exists)) { 上载OrderFileCount++; var count=ftp.Upload(fi); UploadeOrderFileByteCount+=等待计数; fi.删除(); } }
您可以通过使用C# 下面的代码将文件上传到ftp并返回文件和字节数,如何使其并行运行? private异步任务上传(Ftp-ftpHost) { //var资产负债表 var uploadeOrderFileByteCount=0; var uploadedOrderFileCount=0; foreach(资产估值中的var fi,其中(fi=>fi.Exists)) { 上载OrderFileCount++; var count=ftp.Upload(fi); UploadeOrderFileByteCount+=等待计数; fi.删除(); } },c#,C#,您可以通过使用任务执行简单的异步并行。当所有: private async Task Upload(Ftp ftpHost) { //var assetImages is List<FileInfo> var uploadedOrderFileByteCount = 0; var uploadedOrderFileCount = 0; foreach (var fi in assetImage
任务执行简单的异步
并行。当所有:
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();
}
}
private异步任务上传(Ftp-ftpHost)
{
//var资产负债表
var uploadTasks=assetImages.Where(fi=>fi.Exists)。选择(async fi=>
{
var ret=等待ftp.Upload(fi);
fi.删除();
返回ret;
}).ToArray();
var counts=等待任务.WhenAll(上传任务);
var uploadedOrderFileByteCount=counts.Sum();
var uploadedOrderFileCount=counts.Count();
}
看看这个简单的Parallel.ForEach()
示例:谢谢Stephen,我将您的代码放入try catch并进行了测试,发现如果任何上传任务失败,例如取消,计数将为0。如何忽略任何一个失败的上传,直到所有上传完成,然后只计算完成的任务?使用我上面提供的代码,如果任何任务失败,那么计数甚至没有定义(因此它们不会是0或任何其他值)。如果要观察所有任务,请在等待任务之后遍历uploadTasks
。whalll(uploadTasks)
引发异常。谢谢Stephen。我将添加代码,以仅统计完成的任务并忽略失败的任务。
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();
}