任务.运行不明确的参数重载

本文关键字:参数 重载 不明确 运行 任务 | 更新日期: 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()对象的不同变体。