我需要创建一个函数,它将返回一个将在另一个时间执行的任务。
我希望该任务返回一个值(最好通过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
关键字,一切都很糟糕。
我该如何解决这个问题?我能解决这个问题吗?
答案 0 :(得分:0)
我在挖了一点之后找到了答案。如果有人遇到这个确切的问题the answer already exists。
速记:
private static Task<object> FooGet( ) {
return new Task<object>( async ( ) => {
await asyncBar( );
return new object( );
} );
}
变为
private static Task<object> FooGet( ){
return new Task<object>( (Func<Task<object>>)( async ( ) => {
await asyncBar( );
return new object( );
}
}
答案 1 :(得分: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( ){
}