微软.NET团队发布了.NET 11的首个预览版,其中包含了针对.NET运行时、SDK、各种库、C# 15、F#、ASP.NET Core、Blazor以及.NET MAUI所做的更新。根据官方公告,.NET 11被规划为标准支持版本,预计将于2026年11月发布。

在这个预览版中,最值得关注的功能是运行时异步功能。这一功能对.NET中异步方法的运作方式进行了重大改进。根据发布说明,自从C# 5引入了async/await机制以来,编译器一直负责将异步方法转换为能够跟踪暂停状态的变化结构体。而在运行时异步功能中,运行时本身开始将异步方法视为一种一级概念,并接管了暂停与恢复方法执行的职责。

据报道,在这个预览版中,CoreCLR对运行时异步功能的支持是默认启用的,无需设置任何环境变量。同时,也增加了对原生AOT编译的支持。不过在当前的这个预览版本中,还没有任何核心运行时库被编译为支持运行时异步功能的形式,预计在后续的预览版本中这一情况会得到改变。那些想要尝试使用运行时异步编译功能的开发者,需要启用相关预览选项,并在项目文件中设置相应的编译器标志。

除了运行时异步功能外,这个预览版还开始着手将CoreCLR引入WebAssembly框架,从而逐步取代原有的Mono运行时环境。不过目前这一功能尚未准备好供广泛使用。通过新的ZstandardStream类,这些库现在具备了对Zstandard压缩格式的原生支持;同时,也为AI和机器学习应用提供了BFloat16浮点类型;此外还增加了HMAC和KMAC验证API,以及Socket.ConnectAsync方法中对Happy Eyeballs协议的支援。JIT编译器的优化主要集中在提升程序的启动速度以及减少某些关键代码段中的开销方面。

// 使用ZstandardStream进行数据压缩
using var compressStream = new ZstandardStream(outputStream, CompressionMode.Compress);
await inputStream.CopyToAsync(compressStream);

// 进行数据解压
using var decompressStream = new ZstandardStream(inputStream, CompressionMode.Decompress);
await decompressStream,copyToAsync(outputStream);

在语言层面,C# 15引入了集合表达式参数以及更强大的布局支持功能。F#也默认支持并行编译功能,这一功能的实现是社区多年努力的结果。

此次发布的其他更新还包括:在.NET MAUI中,默认会生成XAML源代码;在发布版本中,CoreCLR被指定为Android平台的默认运行时环境;对于命令“dotnet run”来说,现在可以交互式地选择目标框架和设备;新的SDK代码分析工具也被添加进来;Blazor中的EnvironmentBoundary组件得到了改进;Blazor WebAssembly版本也支持IHostedService接口;项目引用相关的热加载功能得到了优化;此外,32位进程的GC堆内存上限也得到了调整。

关于ASP.NET Core方面,在本次预览版本中,Blazor添加了多项新功能。正如发布说明中所提到的,一个新的EnvironmentBoundary组件使得根据托管环境来条件性地渲染内容成为可能,从而实现了与MVC环境标签辅助工具的兼容性。Blazor WebAssembly现在支持IHostedService,可以在浏览器中运行后台服务,并且可以通过IConfiguration访问环境变量来进行运行时配置,而无需重新构建应用程序。

该框架还为表单添加了新的Label和DisplayName组件,改进了QuickGrid中的行点击事件处理机制,支持相对URI导航,为二进制文件响应提供了OpenAPI格式支持,同时还新增了一个IOutputCachePolicyProvider接口,用于动态管理输出缓存策略。在WSL环境中生成的开发证书现在可以在WSL和Windows系统中被自动识别并信任。

社区对这次预览版本的反馈褒贬不一。在Reddit上,许多开发者对“运行时异步功能”表示欢迎,其中有人指出这一功能有望解决异步调用栈在遇到第一个await语句之后就变得不可靠的问题。交互式的dotnet run命令界面也受到了广泛好评。然而,在官方公告博客文章下的评论以及Reddit上的讨论,大多集中在C# 15中的集合表达式功能上,有些评论认为这一功能没有必要存在,还有人质疑这种语言设计是否过于复杂。

也有一些开发者批评发布说明看起来像是人工智能生成的,缺乏之前.NET预览版本中常见的详细内容和示例。不过从另一个角度来看,有一位Reddit用户反而觉得运行时说明中没有过多围绕人工智能技术的营销内容,这反而是一件好事。

对于感兴趣的读者来说,完整的发布说明可以在官方的.NET GitHub仓库以及微软文档网站上找到。

Comments are closed.