For*_*VeR 8 c# lambda async-await
众所周知,我可以将普通的lambda表达式转换为Expression<T>:
Func<int> foo1 = () => 0; // delegate compiles fine
Expression<Func<int>> foo2 = () => 0; // expression compiles fine
Run Code Online (Sandbox Code Playgroud)
我怎么能用异步lambda做同样的事情?我尝试过以下类比:
Func<Task<int>> bar1 = async () => 0; // also compiles (async lambda example)
Expression<Func<Task<int>>> bar2 = async () => 0; // CS1989: Async lambda expressions cannot be converted to expression trees
Run Code Online (Sandbox Code Playgroud)
有可能的解决方法吗?
只有当代码可以由表达式树表示时,C#才能将lambda表达式转换为表达式树,如果您注意到,在System.Linq.Expressions中的表达式中没有等效的"async"关键字
因此,不仅异步,而且C#中提供的表达式中没有等效表达式的任何内容,C#都无法将其转换为表达式树.
其他例子是
该错误是不言自明的:
“异步 lambda 表达式无法转换为表达式树”
它也记录在Async/Await FAQ 中。
并且有充分的理由,async-await是框架之上的编译器功能。表达式用于将代码转换为其他命令(如 SQL)。这些其他语言可能没有async-await等价物,因此通过表达式启用它似乎不值得。
所以不,我看不到解决方法。
| 归档时间: |
|
| 查看次数: |
5710 次 |
| 最近记录: |