如何创建新任务<;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
关键字,一切都很好。
我该怎么解决这个问题?我能解决这个问题吗?
我在进一步挖掘后找到了答案。如果有人遇到这个确切的问题,答案已经存在。
空头:
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( ){
}