C#中async Task Something()=>...语法解析:它是方法还是委托?
C#异步本地函数语法解析
你看到的这行代码:
async Task Something() => await Console.Out.WriteLineAsync("Something");
是C# 7.0引入的异步本地函数,属于定义在方法内部的方法,不是Lambda表达式也不是直接的委托类型,具体拆解说明:
- 本质是本地函数:它是定义在
Main方法内部的具名方法,和普通类方法类似,但作用域仅限于包含它的Main方法内部。 - 表达式体写法:这里用
=>是方法的表达式体简化写法,等价于传统的块体写法:
这种写法在方法逻辑只有一行时可以简化代码,异步方法同样支持这种语法。async Task Something() { await Console.Out.WriteLineAsync("Something"); } - 可隐式转换为委托:因为
Something的签名(无参数、返回Task)完全匹配Func<Task>委托的定义,所以可以直接把它作为参数传给methodX——此时它会被隐式转换为Func<Task>类型的委托实例,供methodX调用执行。
简单来说:Something本身是异步本地方法,但可以被当作Func<Task>委托来使用,这也是它能被传入methodX的原因。
内容的提问来源于stack exchange,提问作者yyhnfd
相关产品推荐
相关产品推荐

