我遇到了这个 C# 编译器错误,虽然我对编译器无法推断 lambda 的类型感到满意,但错误消息似乎是错误的。这是相关的代码:
Func<object> lambda = async () => { return await Task.FromResult(1); };
这是编译器错误:
错误 CS4010:无法将异步 lambda 表达式转换为委托类型“
System.Func<object>
”。异步 lambda 表达式可能返回或void
,它们都不能转换为 ' '。Task
Task<T>
System.Func<object>
我不太明白的部分是最后一句话。lambda 确实在返回Task<int>
,但为什么编译器认为它应该尝试将其转换为lambda System.Func<object>
?
另一方面,如果错误消息试图传达的是 that System.Func<Task<int>>
cannot be assigned to System.Func<object>
,那么由于通用委托协方差,这似乎不是这种情况,这意味着它可以正常工作:
Func<object> lambda = new Func<Task<int>>(async () => { return await Task.FromResult(1); });