不会减慢任务循环的速度,并知道何时返回结果

本文关键字:何时 结果 返回 速度 任务 循环 | 更新日期: 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;

这将启动两个任务,然后在两个任务完成后继续,从而允许并发运行。