.net - 如何启动一个接受参数并返回值的任务?

标签 .net c#-4.0 task-parallel-library

我正在尝试在 C# 中启动一个既接受参数又返回值的任务,但我似乎无法获得正确的语法。

这是我所得到的最接近的结果:这是一个预计返回 int 的任务。我是我的 lambda,我还展示了它采用单个参数,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);

我收到一条语法消息,指出 Delegate 'System.Func' 不接受 1 个参数。

任何有关如何从任务中实现这两件事(传递参数和检索值)的帮助都会很棒!

最佳答案

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

Task<T> 上的泛型类型参数是 Task 的返回类型.

最好的选择是使用闭包:

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

关于.net - 如何启动一个接受参数并返回值的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10920174/

相关文章:

c# - 如何使用 Border() 仅显示网格(而非列)的行边框

c# - 多个更新面板的问题

.net - 使用 SQLBulkCopy - SQL Server 2016 中的表比 SQL Server 2014 中的表大得多

c# - 如何在 C# 中找出 XML 中特定元素之前的元素?

c# - Request.Querystring 会自动 url 解码字符串吗?

c# - 礼品包装算法

c# - 不直接返回任务时最恰本地使用 Async/Await?

c# - TaskLocal<T> 类?

c# - 多线程、lambdas 和局部变量

c# - TimeZoneInfo 和国家代码