我正在努力创建一个接受一些输入参数的Task。然后,我想用不同的输入参数值启动任务。我无法找到一种很好的方法来创建一个接受输入参数的任务,之后我可以按需启动它。
我正在尝试以下方法,但是,在创建任务时,我必须提供输入参数,我不想在此时提供输入参数:
int [] intArray = new int [5] {1,2,3,4,5} ;
Task<double []> task1 = new Task<double []> (item => CovertToDoubleArray ((int []) item), intArray) ;
稍后,我想传递intArray
以外的其他内容。通过此实施,task1
与intArray
绑定。
答案 0 :(得分:2)
我非常怀疑您的要求是否有解决方法。
如果不提供lambda在实例化任务时关闭的变量,那么就可以启动一个尚未运行必要数据的任务。
答案 1 :(得分:2)
如果我理解您的请求,您可以尝试使用通用方法。如果要创建任务,只需调用方法。
public Task<double[]> ConvertToDouble<T>(T [] input)
{
return new Task<double []> (CovertToDoubleArray ((T[]) item), intArray) ;
}
答案 2 :(得分:2)
听起来我实际想要的是某种任务工厂 - 也许是Func<SomeParamType, Task<SomeReturnType>>
。但是,您在帖子中建议的操作只是不一个应该涉及Task
的好例子。
答案 3 :(得分:1)
您可以使用多种选项来创建接受输入和输出的任务:
1:使用具有命名方法的操作委托
var myTask = new Task(new Action(printSomething));
2:使用匿名代理
var myTask = new Task(delegate {printSomething();});
3:使用lambda epx和方法
var myTask = new Task(() => printSomething());
4:Lambda和匿名方法
Task myTask = new Task(() => {printSomething();});
您可以使用以下方法:
static void printSomething() {Console.WriteLine("I was passed to the Task");