【发布时间】:2016-05-08 15:12:43
【问题描述】:
private async void button1_Click(object sender, EventArgs e)
{
await BackupFile();
}
public async Task BackupFile()
{
await Task.Run(() =>
{
for (var i = 0; i < partCount; i++)
{
upload(FilePart);//how to creat a new task at here
//i don't want to wait here, i want to upload all part at same time
}
//wait here.
//if total part got 10, then how to wait 10 task complete
//after 10 task complete
Console.WriteLine("Upload Successful");
});
}
如何循环创建新任务以及如何等待所有任务完成 执行下一行代码
【问题讨论】:
-
听说过
async吗?这似乎适合这种情况。在将upload-mehtod 重写为 async 后,您可以调用像await upload(FilePart);这样的 somtehing 等待操作完成。 -
你可以只使用
Parallel.For并限制并发,但如果upload可以被称为异步,你有更好的选择。有关并行执行异步任务的示例,请参阅 stackoverflow.com/a/11565317/224370。 -
我在打电话,所以只能发表评论,但您需要使您的
upload函数异步,在您的for循环之前创建一个List<Task>,将upload(FilePart)替换为myList.Add(upload(FilePart)),最后在for循环之后添加await Task.WhenAll(myList)。如果在我回到电脑前的几个小时内你还没有接受答案,我会给出完整的答案。 -
@Verbon 的答案是我所建议的,但请务必听取 CodeNotFound 和 ScottChamberlain 的建议。
-
阅读 Stephen Cleary 关于 async-await 的精彩介绍:blog.stephencleary.com/2012/02/async-and-await.html
标签: c# .net multithreading async-await task