【发布时间】:2018-08-22 03:06:52
【问题描述】:
在我的 C# 项目中,我必须打开一堆图像。
假设我们需要打开 50 个。我的计划是创建 10 个任务,做一些事情,然后等待每个任务完成,然后再创建下 10 个任务。
var fd = new OpenFileDialog
{
Multiselect = true,
Title = "Open Image",
Filter = "Image|*.jpg"
};
using (fd)
{
if (fd.ShowDialog() == DialogResult.OK)
{
int i = 1;
foreach (String file in fd.FileNames)
{
if (i <= 10) {
i++;
Console.WriteLine(i + ";" + file);
Task task = new Task(() =>
{
// do some stuff
});
task.Start();
}
else
{
Task.WaitAll();
i = 1;
}
}
}
}
Console.WriteLine("Wait for Tasks");
Task.WaitAll();
Console.WriteLine("Waited);
代码在i=10 时没有等待,最后它也没有等待。
有谁知道如何解决它?
【问题讨论】:
-
只要使用
Task.ContinueWith -
Task.WaitAll();在 WinForms 应用程序中 == 因死锁而死亡。异步正确或根本不正确。 blog.stephencleary.com/2012/07/dont-block-on-async-code.html -
Task.WaitAll期望任务集合等待,你永远不会传递任何东西...... -
谢谢!我知道代码很垃圾,但对于我的计划来说它运行良好。 :)