2
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);
    }
} 

这将通过任务循环,但是你怎么知道结果什么时候都在不影响循环速度的情况下呢?

4

1 回答 1

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;

这将启动两个任务,然后在两个任务完成后继续,然后允许同时运行。

于 2013-02-05T21:23:46.700 回答