创建任务时,是否可以记录用于启动任务的参数。
以下面的例子为例(只是一个原型,它不是真的!)。
static void Main(string[] args)
{
ICollection<Task<int>> taskList = new List<Task<int>>();
// Create a set of tasks
for (int i = 1; i <= 10; i++)
{
var local_i = i; // Local scoped variable
Task<int> t = new Task<int>(() =>
{
return myFunc(local_i);
});
t.Start();
taskList.Add(t);
}
// Wait for all the tasks to complete.
Task.WaitAll(taskList.ToArray());
// Output the results
foreach (var tsk in taskList)
{
// the "???" should be the input value to the task
System.Diagnostics.Debug.WriteLine("Input: ??? - Result: "+tsk.Result);
}
}
static int myFunc(int i)
{
return (i * i);
}
当输出结果时,我想知道为myFunc()
提供了哪些输入变量产生了结果
答案 0 :(得分:3)
除了使用这两个值返回Tuple
之外,您还可以将taskList
设为ICollection<Tuple<int, Task<int>>>
并将参数存储在那里。为简化起见,您可以为此创建自己的类:
class TaskInfo<T>
{
public Task<T> Task { get; set; }
public T Parameter { get; set; }
}
然后
var taskList = new List<TaskInfo<int>>();
...
taskList.Add(new TaskInfo { Task = t, Parameter = local_i });
答案 1 :(得分:0)
如果您可以更改myFunc
更改返回类型,那么它会将输入和结果作为Tuple
返回。
如果您无法使用Dictionary
或List<Tuple<input,Task>>
将输入与任务(而不是ICollection
)一起存储