如何创建新的 Task<T>( async( ) => { return new T( ); } );?

3

我需要创建一个函数,该函数将返回在另一个时间执行的任务。

我希望该任务能够返回一个值(最好通过await)。

我还希望能够在该任务中await方法/函数。

当我尝试创建一个简单的概念函数来实现我的目标时,我收到了红线错误消息:

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

错误信息为:无法将lambda表达式转换为类型“object”,因为它不是委托类型 只要从lambda中删除async关键字,一切都很顺利。
我该如何解决这个问题?我能解决吗?
2个回答

2

我在深入挖掘后找到了答案。如果有人遇到这个确切的问题,请参考已有的答案

简写:

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

变成

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

既然你已经添加到另一个答案中,我认为获得赞同是完全可以的。但是,如果你决定不接受它们,你总是可以将答案添加为社区维基,这大多数情况下会从帖子中删除你的所有权。 - halfer
@halfer,我真的不知道你在说什么。可以给我一些上下文吗? - Will
看到了我对你的回答所做的修改 - 你要求人们投票支持另一个答案,而不是你自己的答案。我将其编辑掉了,因为我认为这是过度的元评论,但无论如何,我认为你对自己有些不公平,如果人们愿意,你自己的问题也值得得到赞同。 - halfer
@halfer 世界真的。 - Will

0

你需要明确地将其转换为 Func<Task<object>>,或者如果你想保持代码的可读性,你可以重构它为

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( ){
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接