Steven Toub向.NET 5介绍了免分配的ValueTask<T>.

Method           Runtime        Mean       Ratio    Allocated
ValueTaskCost   .NET FW 4.8     1,635.6 us  1.00    294010 B
ValueTaskCost   .NET Core 3.1   842.7 us    0.51    120184 B
ValueTaskCost   .NET 5.0        812.3 us    0.50    186 B     <--- !

我第一次发现这一点是在Dapper英雄Marc Gravell here的一篇帖子中,他建议总是使用ValueTask而不是Task(尽管有趣的是Dapper没有这样做).

可以使用环境变量DOTNET_SYSTEM_THREADING_POOLASYNCVALUETASKS来启用该功能,该变量似乎已不再存在于.NET中.

发生什么事了?这是一个技术原因被删除,或者可能是默认的?

推荐答案

实验特性被一个定制构建器实现取代了here,该实现通过添加以下属性逐个方法地使用:

[AsyncMethodBuilder(typeof(PoolingAsyncValueTaskMethodBuilder<>))]

(或非通用类似功能)

.net相关问答推荐

ASP.NET核心最小API必须以正斜杠开头吗?

EF Core IEntityTypeConfigurations:从数据库提取数据后相关对象为空

从删除项目时重新索引的列表中删除项目的最佳算法是什么?

与 Datagrid 的 SelectedItem 链接时的 WPF RadioButton 绑定问题

无法实例化类的代理:System.Net.HttpWebRequest.找不到无参数构造函数

线程安全性的单元测试?

maxRequestLength 的最大值?

将客户端证书添加到 .NET Core HttpClient

为什么循环引用被认为是有害的?

SubscribeOn 和 ObserveOn 有什么区别

BackgroundWorker 中未处理的异常

.Net 中的 Decimal.One、Decimal.Zero、Decimal.MinusOne 的用途是什么

何时在 C#/.NET 中使用指针?

在 C# 中将字符串转换为十六进制字符串

如何使用 Android 使用 WCF 服务

如何将 XPath 与 XElement 或 LINQ 一起使用?

.NET 中的对象引用有多大?

如何仅在需要时提升权限?

ConcurrentDictionary TryRemove 何时返回 false

当它被抛出和捕获时,不要在那个异常处停止调试器