美好的一天! 我试图使用lambda表达式编写一个匿名方法,该表达式将从异步任务返回一个对象。我想在构造函数中执行此操作,因此这是我无法使其父方法异步的原因。
ReadJsonAsync方法返回Session
个对象。
我会告诉你相关的代码:
Session session;
fileService = new FileService();
session = async () => { return await fileService.ReadJsonAsync() };
提前致谢!
答案 0 :(得分:8)
如果您需要匿名方法,则必须声明一个返回Task<Session>
的方法,因为它标有async
修饰符,因此必须返回{ {1}}(仅适用于异步事件处理程序),void
或Task
:
Task<T>
如果你所做的只是运行Func<Task<Session>> anonFunction = async () => await fileService.ReadJsonAsync();
,你也可以自己保存状态机代:
ReadJsonAsync
然后你可以在更高阶函数上Func<Task<Session>> anonFunction = fileService.ReadJsonAsync;
:
await
答案 1 :(得分:1)
要添加到Yuval的有用答案中,如果您只想等待内联函数,那么魔术语法是:
await ((Func<Task>)(async () =>
{
//async function code
}
))();
请注意最后的多余括号,以在声明后立即调用lambda。显然,如果您的函数返回类型,则该类型为Func<Task<Whatever>>
例如在使用Task.WhenAny()
来等待内联函数和超时任务时很有用。