你好! 我正在尝试使用lambda表达式编写匿名方法,该方法将从异步任务中返回一个对象。我想在构造函数中执行此操作,因此我无法将其父方法设置为异步。
ReadJsonAsync方法返回一个Session
对象。
以下是相关代码:
Session session;
fileService = new FileService();
session = async () => { return await fileService.ReadJsonAsync() };
提前致谢!
你好! 我正在尝试使用lambda表达式编写匿名方法,该方法将从异步任务中返回一个对象。我想在构造函数中执行此操作,因此我无法将其父方法设置为异步。
ReadJsonAsync方法返回一个Session
对象。
以下是相关代码:
Session session;
fileService = new FileService();
session = async () => { return await fileService.ReadJsonAsync() };
提前致谢!
如果你想要一个匿名方法,你需要声明一个返回 Task<Session>
的方法,并且标记为 async
,因为它必须返回 void
(仅适用于异步事件处理程序),Task
或者 Task<T>
:
Func<Task<Session>> anonFunction = async () => await fileService.ReadJsonAsync();
ReadJsonAsync
,您也可以像这样避免状态机生成:Func<Task<Session>> anonFunction = fileService.ReadJsonAsync;
然后你可以在调用堆栈的更高层次上使用 await
:
Func<Task<Session>> anonFunction = fileService.ReadJsonAsync;
await anonFunction();
await ((Func<Task>)(async () =>
{
//async function code
}
))();
Func<Task<Whatever>>
当你使用Task.WhenAny()
时非常有用,例如等待内联函数和超时任务。
Session
是一个委托类型吗?你想做什么? - Yuval Itzchakovreturn await fileService.ReadJsonAsync()
是多余的;您可以直接返回fileService.ReadJsonAsync()
并删除async
修饰符。 - Thomas Levesque