C# 不减慢任务循环,并知道何时返回结果 任务运行列表(int客户端) { 返回页面[客户端]; } 私有异步void Form1\u双击(对象发送方,事件参数e) { 对于(int x=0;x

C# 不减慢任务循环,并知道何时返回结果 任务运行列表(int客户端) { 返回页面[客户端]; } 私有异步void Form1\u双击(对象发送方,事件参数e) { 对于(int x=0;x,c#,task-parallel-library,C#,Task Parallel Library,这将穿越任务循环,但您如何知道结果何时全部进入而不影响循环速度?您可以等待的结果,以确保所有任务都在代码中的该点完成。(这里不要使用WaitAll,这会阻塞UI线程,这一点很重要。) 这将执行第一个任务,然后执行第二个任务 await Task.Delay(1000); await Task.Delay(1000); 这将启动两个任务,然后在两个任务完成后继续执行,从而允许同时运行。任何Wait或.Wait()都会将其减速为爬网,一次只执行一页,我希望所有任务都启动,然后在计算完所有结果后通知

这将穿越任务循环,但您如何知道结果何时全部进入而不影响循环速度?

您可以
等待
的结果,以确保所有任务都在代码中的该点完成。(这里不要使用
WaitAll
,这会阻塞UI线程,这一点很重要。)

这将执行第一个任务,然后执行第二个任务

await Task.Delay(1000);
await Task.Delay(1000);

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

任何Wait或.Wait()都会将其减速为爬网,一次只执行一页,我希望所有任务都启动,然后在计算完所有结果后通知。我应该能够处理的错误。。可能需要一些关于聚合错误的帮助,但我也曾经被困在那里。。(InnerExceptions?)。我们不能说,因为我们不知道它是如何实现的;这应该是等待任务。WhenAll(任务);
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 Task.Delay(1000);
await Task.Delay(1000);
var task1 =  Task.Delay(1000);
var task2 =  Task.Delay(1000);

await task1;
await task2;