我在C#中使用Task类,并希望传递一个预定义的方法,该方法返回一个值而不使用lambdas到Task.Run
方法。
这是一个控制台应用程序,代码为:
static int ThreadMethod()
{
return 42;
}
static void Main(string[] args)
{
Task<int> t = Task.Run(function:ThreadMethod);
WriteLine(t.Result);
}
然而,它正在返回此错误:
以下方法或属性之间的调用不明确:&#39; Task.Run&lt; TResult&gt;(Func&lt; TResult&gt;)&#39;和&#39; Task.Run(Func&lt; Task&gt;)&#39;
我尝试这样做来修复它并得到我预期的结果:
Task<int> t = Task.Run((Func<int>)ThreadMethod);
但是,我不确定我是做得对还是有更好的解决方案?
答案 0 :(得分:1)
修复您的.Run参数,就像在此示例中一样。可以复制并粘贴到LinqPad进行测试。
public static void Main(string[] args)
{
Task<int> t = Task.Run(() => ThreadMethod());
WriteLine(t.Result);
}
public static int ThreadMethod()
{
return 42;
}
如果您想将其视为变量,请通过以下方式检查:
public static void Main(string[] args)
{
//Func<int> is saying I want a function with no parameters
//but returns an int. '() =>' this represents a function with
//no parameters. It then points to your defined method ThreadMethod
//Which fits the notions of no parameters and returning an int.
Func<int> threadMethod = () => ThreadMethod();
Task<int> t = Task.Run(threadMethod);
Console.WriteLine(t.Result);
}
public static int ThreadMethod()
{
return 42;
}
这是Func(T)上的Documentation,在左侧菜单中,您可以选择Func()对象的不同变体。