不会减慢任务循环的速度,并知道何时返回结果
本文关键字:何时 结果 返回 速度 任务 循环 | 更新日期: 2023-09-27 17:58:05
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);
}
}
这将贯穿任务的循环,但您如何在不影响循环速度的情况下知道结果何时全部到位?
您可以对WhenAll
的结果执行await
,以确保所有任务都已在代码中完成。(重要的是不要在这里使用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;
这将启动两个任务,然后在两个任务完成后继续,从而允许并发运行。