任务.运行不明确的参数重载
本文关键字:参数 重载 不明确 运行 任务 | 更新日期: 2023-09-27 18:24:03
我在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<TResult>(Func<TResult>)'和'Task.Run(Func<Task>
我试着这样做来修复它,并得到了我预期的结果:
Task<int> t = Task.Run((Func<int>)ThreadMethod);
然而,我不确定我做得是否正确,或者有更好的解决方案吗?
像本例一样修复你的.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)的文档,在左侧菜单上,您可以选择Func()对象的不同变体。