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。。。完全不知道你在说什么。请给我一些背景资料好吗?请看我对你的答案所做的编辑-你要求人们对另一个答案进行投票,而不是你自己的答案。我把它删掉了,因为我觉得这是过度的元评论,但无论如何,我认为你对自己相当不公平,如果人们愿意给你自己的问题投票,你自己的问题值得投票。