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

本文关键字:输入 任务 参数 何创建 创建 一个 | 更新日期: 2023-09-27 18:07:32

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

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

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

之后,我想传递intArray以外的其他内容。实现task1intArray绑定

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

如果我正确理解您的请求,您可以尝试使用通用方法。当您想创建任务时,只需调用method.

public Task<double[]> ConvertToDouble<T>(T [] input)
{
    return new Task<double []> (CovertToDoubleArray ((T[]) item),  intArray) ;
}

我非常怀疑是否有解决您的需求的方法。

如果您可以提供实例化任务时lambda关闭的变量,则可以启动尚未拥有运行所需数据的任务。

听起来你实际上想要的是一个任务工厂某种类型-可能是Func<SomeParamType, Task<SomeReturnType>>。但是,您在帖子中建议的操作只是而不是,这是应该涉及Task的一个很好的例子。

有几个选项可供您创建同时接受输入和输出的任务:

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