C# 如何创建新任务<;T>;(async()=>;{返回新的T();});?

C# 如何创建新任务<;T>;(async()=>;{返回新的T();});?,c#,asynchronous,lambda,task,C#,Asynchronous,Lambda,Task,我需要创建一个函数,它将返回一个将在其他时间执行的任务 我希望该任务返回一个值(最好通过waiting返回) 我还希望能够等待该任务中的方法/功能 当我尝试创建一个简单的概念性函数,该函数应能满足我的要求时,我收到一条红线错误消息: private static Task<object> FooGet( ) { return new Task<object>( async ( ) => { await asyncBar( );

我需要创建一个函数,它将返回一个将在其他时间执行的任务

我希望该任务返回一个值(最好通过
wait
ing返回)

我还希望能够
等待该任务中的方法/功能

当我尝试创建一个简单的概念性函数,该函数应能满足我的要求时,我收到一条红线错误消息:

private static Task<object> FooGet( ) {
    return new Task<object>( async ( ) => {
        await asyncBar( );
        return new object( );
    } );
}
private静态任务FooGet(){
返回新任务(异步()=>{
等待asyncBar();
返回新对象();
} );
}
错误如下:
无法将lambda表达式转换为类型“object”,因为它不是委托类型

只要我从lambda中删除
async
关键字,一切都很好


我怎样才能解决这个问题?我甚至可以解决这个问题吗?

我在进一步挖掘后找到了答案。万一有人碰到这个问题

速记:

private static Task<object> FooGet()
{
    return new Task<object>(async () =>
    {
        await asyncBar();
        return new object();
    });
}
private静态任务FooGet()
{
返回新任务(异步()=>
{
等待asyncBar();
返回新对象();
});
}
变成

private static Task<object> FooGet()
{
    return ((Func<Task<object>>)(async () =>
    {
        await asyncBar();
        return new object();
    }))();
}
private静态任务FooGet()
{
返回((Func)(异步()=>
{
等待asyncBar();
返回新对象();
}))();
}

您需要显式地将其强制转换为
Func
,或者,如果您想让内容更具可读性,可以将其重构为

private static Task<object> FooGet( ) {
    return new Task<object>(innerTask);
}

private async static Task<object> innerTask() {
    await asyncBar( );
    return new object( );
}

private static async Task asyncBar( ){
}
private静态任务FooGet(){
返回新任务(innerTask);
}
私有异步静态任务innerTask(){
等待asyncBar();
返回新对象();
}
专用静态异步任务asyncBar(){
}

既然您已经添加了另一个答案,我认为获得投票完全可以。但是,如果您决定不接收它们,您可以始终添加一个答案作为社区wiki,这主要会从帖子中删除您的所有权。@halfer I。。。完全不知道你在说什么。请给我一些背景资料好吗?请看我对你的答案所做的编辑-你要求人们对另一个答案进行投票,而不是你自己的答案。我把它删掉了,因为我觉得这是过度的元评论,但无论如何,我认为你对自己相当不公平,如果人们愿意给你自己的问题投票,你自己的问题值得投票。