Task<string> RunList(int client)
{
return pages[client];
}
private async void Form1_DoubleClick(object sender, EventArgs e)
{
for (int x = 0; x < listBox1.Items.Count; x++)
{
RunList(x);
}
}
这将贯穿任务循环,但是你怎么知道结果何时全部存在而不影响循环的速度?
答案 0 :(得分:5)
您可以await
WhenAll
的结果来确保代码中的所有任务都已完成。 (重要的是不要在这里使用WaitAll
,这将阻止UI线程。)
private async void Form1_DoubleClick(object sender, EventArgs e)
{
var tasks = new List<Task<string>>();
for (int x = 0; x < listBox1.Items.Count; x++)
{
tasks.Add(RunList(x));
}
await Task.WhenAll(tasks);
}
这里的基本想法是在调用await
之前简单地启动任务。这是一个简单的例子,只有两个任务:
await Task.Delay(1000);
await Task.Delay(1000);
这将执行第一个任务,然后执行第二个任务。
var task1 = Task.Delay(1000);
var task2 = Task.Delay(1000);
await task1;
await task2;
这将启动两个任务,然后在两个任务完成后继续,然后允许同时运行。