【发布时间】:2016-04-01 05:50:15
【问题描述】:
我在 C# 中使用 Task 类,并希望将返回值的预定义方法传递给 Task.Run 方法,而不是使用 lambda。
这是一个带有代码的控制台应用程序:
static int ThreadMethod()
{
return 42;
}
static void Main(string[] args)
{
Task<int> t = Task.Run(function:ThreadMethod);
WriteLine(t.Result);
}
但是,它返回此错误:
以下方法或属性之间的调用不明确:'Task.Run
(Func )' 和 'Task.Run(Func )'
我尝试这样做来修复它并得到了我的预期结果:
Task<int> t = Task.Run((Func<int>)ThreadMethod);
但是,我不确定我做得对还是有更好的解决方案?
【问题讨论】:
-
Func 和 Action 只是代表。他们只有一个名字;)。改用 lambda。顺便说一句,他们是匿名代表。
()=>ThreadMethod() -
通过一些技巧,如果您出于任何原因不想使用 lambda。你可以这样做。
Task.Run(function: ThreadMethod)。但是您应该将方法签名更改为此。static async Task<int> ThreadMethod()。这是没有意义的,但它可以编译。 -
哇,
async部分让它更加混乱。对不起,我仍然是 C# 中多任务和异步编程的菜鸟 -
无论如何,感谢您回答我的问题。同时,我会按照您和 Cubicle Jockey 的建议去做,同时寻找更多信息。
-
此问题已在 C# 7.3 中修复,请参阅 this answer