如何启动需要一个参数和返回值的任务吗?(How to start a task that takes

2019-07-29 18:18发布

我试图推出在C#中的任务,既需要一个参数和返回值,但我似乎无法得到正确的语法。

这里是亲如我已经得到了:这里的,预计将返回一个int的任务。 我在我的拉姆达,我也呈现出它采用单个参数,O:

Task<int> task1 = Task.Factory.StartNew<int>((o) => { return 2 ; }, 3);
Console.WriteLine(task1.Result);  // prints 2

上面一行的作品(它返回的2硬编码的值,但你可以看到它在做什么用的参数O,使其成为无用的,如果我做了什么与参数O,像这样:

Task<int> task1 = Task.Factory.StartNew<int>((o) => { return (2 * o) ; }, 3);

我得到的委托“System.Func”不拿1个参数的语法消息。

如何实现这两种东西任何帮助(参数传递和获取的值)从一个任务将是巨大的!

Answer 1:

对于输入(状态)参数Task只能是类型的object ,所以它实际上不是类型安全的。

上一般类型参数Task<T>是的返回类型Task

最好的办法是使用封闭:

int i = 3;
Task<int> task1 = Task.Factory.StartNew( () => 2 * i );


Answer 2:

o为对象的状态,并在你的情况,是要传递的价值,或者3.您可以将其转换为int

Task<int> task = Task.Factory.StartNew<int>(o => {
    return 2 * (int)o;
}, 3);

Console.WriteLine(task.Result); // prints 6

请参阅MSDN对文档TaskFactory 。 StartNew其中规定:

类型:System.Object

由函数代表可以使用包含数据的对象。



Answer 3:

那里有Task<t>您可以使用(看这里 ),T是当然的返回值。 作为参数的-你可以用乌尔变量annonymous委托范围内,所以如果你有int o任务之外定义的,你可以在任务annonymous委托范围内使用。 你可以看到一个样本在这里



文章来源: How to start a task that takes a parameter and returns a value?