如何创建一个接受输入参数的Task

时间:2014-06-09 10:12:22

标签: c# .net task

我正在努力创建一个接受一些输入参数的Task。然后,我想用不同的输入参数值启动任务。我无法找到一种很好的方法来创建一个接受输入参数的任务,之后我可以按需启动它。

我正在尝试以下方法,但是,在创建任务时,我必须提供输入参数,我不想在此时提供输入参数:

int [] intArray = new int [5] {1,2,3,4,5} ;
Task<double []> task1 = new Task<double []> (item => CovertToDoubleArray ((int []) item),  intArray) ;

稍后,我想传递intArray以外的其他内容。通过此实施,task1intArray绑定。

4 个答案:

答案 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");