C# 创建没有lambda的任务

C# 创建没有lambda的任务,c#,lambda,async-await,C#,Lambda,Async Await,尝试传递函数而不是lambda表达式,最终混淆了为什么行: int t2 = await Task.Run( ()=>Allocate2() ); 不引起错误。此lambda表达式()=>Allocate2()不返回Task。为什么没有错误 如何使用函数Allocate创建没有lambda表达式的任务 static async void Example() { int t = await Task.Run(Allocate); int t2 =

尝试传递函数而不是lambda表达式,最终混淆了为什么行:

int t2 = await Task.Run( ()=>Allocate2() );
不引起错误。此lambda表达式
()=>Allocate2()
不返回
Task
。为什么没有错误

如何使用函数
Allocate
创建没有lambda表达式的任务

 static async void Example()
    {

        int t = await Task.Run(Allocate);
        int t2 = await Task.Run( ()=>Allocate2() );
        Console.WriteLine("Compute: " + t);
    }


static Task<int> Allocate()
    {
    return 1;
    }


static int Allocate2()
    {
    return 1;
    }
静态异步void示例()
{
int t=等待任务。运行(分配);
int t2=wait Task.Run(()=>Allocate2());
控制台写入线(“计算:+t”);
}
静态任务分配()
{
返回1;
}
静态int分配2()
{
返回1;
}
Task.Run()
希望您向其传递无参数的
操作
Func

可以将lambda分配给
操作
函数
(视情况而定),这就是使用lambda调用
任务.Run()
的原因

如果不想使用lambda,则必须显式创建
操作
函数
,将要调用的方法传递给
操作
函数
的构造函数

以下说明:

static void Main()
{
    var task = Task.Run(new Action(MyMethod));
}

static void MyMethod()
{
    Console.WriteLine("MyMethod()");
}
或:

static void Main()
{
var task=task.Run(newfunc(MyMethod));
}
静态int-MyMethod()
{
Console.WriteLine(“MyMethod()”);
返回42;
}

请注意,如果该方法需要一个或多个参数,则此操作不起作用。在这种情况下,必须使用lambda。

return
Task
。此任务在内部执行的是另一种情况(请参阅重载)。运行此任务时,我会遇到以下错误
无法将类型“int”隐式转换为“System.Threading.Tasks.task”
,因为返回类型不匹配。但您试图实现的是什么呢?我试图在不使用lambda表达式的情况下运行任务,为什么不将
Allocate
async并调用
var t=await Allocate()
您还可以执行显式强制转换作为
new
ing的替代方法。在这种情况下如何使用显式强制转换?@vico您可以这样强制转换:
var task=task.Run((Func)MyMethod)-但我并不认为这是一种改进。实际上,最终生成的代码大致相同。@Downvoter:如果你认为这个答案不正确,你应该解释原因。如果它真的是不正确的,人们应该知道——否则它将特别具有误导性,因为它被标记为正确答案。
static void Main()
{
    var task = Task.Run(new Func<int>(MyMethod));
}

static int MyMethod()
{
    Console.WriteLine("MyMethod()");
    return 42;
}