我有一个任务列表,我使用 WhenAll 方法来执行它们。执行后,我需要用于执行该方法的参数,以便我可以对结果进行分类,因为结果不包括这些参数。在将 foreach 与任务列表一起使用时,如何访问该任务中使用的参数?
我知道我可以更改我的对象模型以在答案中包含参数,但它是一个整体,我现在不想碰它。只是想知道是否有办法做到这一点。
编辑一些代码示例:
List<Task<List<myclass>>> tasklist = new List<Task<List<myclass>>>();
foreach (var item in list)
{
tasklist.Add(_someservice.getsome(item));
}
var taskresults = await Task.WhenAll(tasklist);
List<databaseclass> to_be_saved = new List<databaseclass>();
foreach (var item in tasklist)
{
//this is where I initialize the database class to save objects
//in here I want to call the parameter from individual task.
}
从
Task.WhenAll
返回的数组包含与提供的 Task
s相同顺序的项目。 考虑到这一点,您可以使用
for
循环来查找相应的参数(假设
items
是可索引集合):
for (var i = 0; i < taskresults.Length; i++)
{
var param = items[i];
var result = taskresults[i];
}
或者如果 items
是任意
IEnumerable<T>
,那么你可以使用
Enumerable.Zip
:
foreach (var tuple in items.Zip(taskresults))
{
var param = tuple.First;
var result = tuple.Second;
}