【发布时间】:2019-08-08 20:57:35
【问题描述】:
public class Input
{
public bool ParameterOne { get; set; }
public string ParameterTwo { get; set; }
}
我有一个List<Input>,我想并行处理它,保持输入与输出相关联。我遍历这个列表来构建Tasks。
var results = new List<(Input, Output)>();
foreach (var input in inputs)
{
Output output = await Process(input);
results.Add((input, output));
}
但这不是并行运行的。我愿意。
var inputsAndTasks = new List<(Input Input, Task<Output> OutputTask)>();
foreach (var input in inputs)
{
Task<Output> output = Process(input);
inputsAndTasks.Add((input, output));
}
Output[] results = await Task.WhenAll(inputsAndTasks.Select(i => i.OutputTask));
// results are no longer associated with their inputs!
我怎样才能并行运行它但保留输入与输出的关联?我不想让输入成为输出上的对象。
【问题讨论】:
-
var results = inputs.AsParallel().Select(input => { Output output = await Process(input); return (input, output); }).ToList();
标签: c# asynchronous parallel-processing task task-parallel-library