如何创建新任务<;T>;(async()=>;{return new T();});

本文关键字:gt new async return lt 何创建 创建 新任务 | 更新日期: 2023-09-27 18:26:06

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

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

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

当我试图创建一个简单的概念函数来做我想做的事情时,我得到了一条红线错误消息:

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

错误为:Cannot convert lambda expression to type 'object' because it is not a delegate type

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

我该怎么解决这个问题?我能解决这个问题吗?

如何创建新任务<;T>;(async()=>;{return new T();});

我在进一步挖掘后找到了答案。如果有人遇到这个确切的问题,答案已经存在。

空头:

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

您需要显式地将其强制转换为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( ){
}