由社区推动的 .NET 6 新 API

原文:bit.ly/3ykXfgJ
作者:David Fowler
翻译:精致码农-王亮

.NET 6 即将到来,我想分享一些我最喜欢的 .NET 和 ASP.NET Core 中的新 API,你一定会喜欢,因为它们是由我们优秀的 .NET 开发者社区推动的。让我们开始吧!

1读写文件

在 .NET 6 中,有一个新的底层 API,可以在不使用 FileStream 的情况下实现文件的读/写。它还支持分散/聚集 IO(多个缓冲区)和在给定文件偏移处的重叠读写:

using Microsoft.Win32.SafeHandles;
using SafeFileHandle handle = File.OpenHandle("ConsoleApp128.exe");
long length = RandomAccess.GetLength(handle);Console.WriteLine(length);

2进程路径和 ID

有几种新的方法可以在不分配新进程对象的情况下访问进程路径和进程 ID:

int pid = Environment.ProcessId;
string path = Environment.ProcessPath;Console.WriteLine(pid);
Console.WriteLine(path);

3CSPNG

CSPNG(Cryptographically Secure Pseudorandom Number Generator) 生成随机数比以往更容易:

// Give me 200 random bytes
byte[] bytes = RandomNumberGenerator.GetBytes(200);

4Parallel.ForEachAsync

我们最终添加了 Parallel.ForEachAsync,这是一种允许你控制并行异步工作的方法:

var urlsToDownload = new []
{"https://dotnet.microsoft.com","https://www.microsoft.com","https://twitter.com/davidfowl"
};var client = new HttpClient();await Parallel.ForEachAsync(urlsToDownload, async (url, token) =>
{var targetPath = Path.Combine(Path.GetTempPath(), "http_cache", url);HttpResponseMessage response = await client.GetAsync(url);if (response.IsSuccessStatusCode){using FileStream target = File.OpenWrite(targetPath);await response.Content.CopyToAsync(target);}
});

5配置辅助

我们添加了一个辅助功能,使其更容易在配置中缺失必要部分时抛出异常:

var configuration = new ConfigurationManager();
var options = new MyOptions();// This will throw if the p isn't configured
configuration.GetRequiredSection("MyOptions").Bind(options);class MyOptions
{public string? SettingValue { get; set;}
}

6LINQ

还有大量的新的 LINQ 方法。在这个版本中,它广受开发者喜爱。这里有一个新的辅助方法,可以将任何 IEnumerable 集合分块成批:

int chunkNumber = 1;
foreach (int[] chunk in Enumerable.Range(0, 9).Chunk(3))
{Console.WriteLine($"Chunk {chunkNumber++}");foreach (var item in chunk){Console.WriteLine(item);}
}

7更多的 LINQ

更多的 LINQ!现在有了 MaxByMinBy 方法:

var people = GetPeople();var oldest = people.MaxBy(p => p.Age);
var youngest = people.MinBy(p => p.Age);Console.WriteLine($"The oldest person is {oldest.Age}");
Console.WriteLine($"The youngest person is {youngest.Age}");public record Person(string Name, int Age);

82 的幂

不想在脑子里做位运算?我也不想。这里有一些用于处理 2 的幂的新辅助方法:

using System.Numerics;uint bufferSize = 235;
if (!BitOperations.IsPow2(bufferSize))
{bufferSize = BitOperations.RoundUpToPowerOf2(bufferSize);
}Console.WriteLine(bufferSize);

9WaitAsync 改进

现在有一种更简单(并且正确实现)的方法来异步等待任务的完成。该操作可能仍在运行 这是为不可取消的操作准备的!

Task operationTask = SomeLongRunningOperationAsync();await operationTask.WaitAsync(TimeSpan.FromSeconds(10));

10ThrowIfNull

不再需要在抛出异常之前在每个方法中检查 null。现在只需要一行代码了:

void DoSomethingUseful(object obj)
{ArgumentNullException.ThrowIfNull(obj);
}

11使用 NativeMemory

如果你想使用 C 语言的 API 来分配内存,因为你是一个 l33t 黑客,或者需要分配本地内存,那么现在有了。不要忘记释放!

using System.Runtime.InteropServices;unsafe
{byte* buffer = (byte*)NativeMemory.Alloc(100);NativeMemory.Free(buffer);
}

12Posix 信号处理

现在有了对 Posix 信号处理的本地支持,我们也在 Windows 上模拟了几个信号:

using System.Runtime.InteropServices;var tcs = new TaskCompletionSource();PosixSignalRegistration.Create(PosixSignal.SIGTERM, context =>
{Console.WriteLine($"{context.Signal} fired");tcs.TrySetResult();
});await tcs.Task;

13新的 Metric API

我们在 .NET 6 中基于 @opentelemetry 添加了一个全新的 Metric API。它支持维度,高效,并将为流行的 Metric 槽提供导出:

using System.Diagnostics.Metrics;// This is how you produce metricsvar meter = new Meter("Microsoft.AspNetCore", "v1.0");
Counter<int> counter = meter.CreateCounter<int>("Requests");var app = WebApplication.Create(args);app.Use((context, next) =>
{counter.Add(1, KeyValuePair.Create<string, object?>("path", context.Request.Path.ToString()));return next(context);
});app.MapGet("/", () => "Hello World");

你甚至可以监听并测算:

var listener = new MeterListener();
listener.InstrumentPublished = (instrument, meterListener) =>
{if(instrument.Name == "Requests" && instrument.Meter.Name == "Microsoft.AspNetCore"){meterListener.EnableMeasurementEvents(instrument, null);}
};listener.SetMeasurementEventCallback<int>((instrument, measurement, tags, state) =>
{Console.WriteLine($"Instrument: {instrument.Name} has recorded the measurement: {measurement}");
});listener.Start();

14定时器 API

最后但并非最不重要的是,一个现代的定时器 API(我想这是.NET 中的第五个定时器 API 了)。它是完全异步的,并且不受其他定时器的问题困扰,比如对象生命周期问题,没有异步回调等等。

var timer = new PeriodicTimer(TimeSpan.FromSeconds(1));while (await timer.WaitForNextTickAsync())
{Console.WriteLine(DateTime.UtcNow);
}

15总结

这只是 .NET 6 中新 API 的一分部。想要了解更多信息,请看 .NET 6 发布说明中的 API 差异。另外,Stephen 刚刚写了一篇关于.NET 6 的性能改进的精彩博文,请务必阅读。最后,别忘了下载 .NET 6 预览版,今天就来试试新的 API。

.NET 6 release notes API diffs
https://github.com/dotnet/core/tree/main/release-notes/6.0/preview/api-diffPerformance Improvements in .NET 6
https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-6

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

启动与停止mysql服务的命令

在“运行”中运行如下命令&#xff1a;启动mysql: net start mysql 停止mysql: net stop mysql 转载于:https://www.cnblogs.com/qiantuwuliang/archive/2009/07/12/1521921.html

hash算法_到底什么是Hash?Hash算法的原理和实际应用讲解

提到hash&#xff0c;相信大多数同学都不会陌生&#xff0c;之前很火现在也依旧很火的技术区块链背后的底层原理之一就是hash&#xff0c;下面就从hash算法的原理和实际应用等几个角度&#xff0c;对hash算法进行一个讲解。1、什么是HashHash也称散列、哈希&#xff0c;对应的英…

java 子类 复制_关于java子类继承来的属性与方法究竟是完全复制还是共用使用...

关于java子类继承来的属性与方法究竟是完全复制还是共用使用关于java子类继承来的属性与方法究竟是完全复制还是共用使用今天在学习java的面向对象时&#xff0c;无意间发现一个问题。public class testEquals{public static void main(String[] args){Child cd1 new Child();…

关于IE某些原因导致下拉列表弹出阻止窗口的解决办法

找个N多方案&#xff0c;未果。最终还是重新安装IE解决。 原因可能是因为我同时安装的IE6&#xff0c;IE7共存导致的。转载于:https://www.cnblogs.com/23shi/archive/2010/09/29/1838747.html

女生会 P 的可不仅仅是丰胸和瘦腿......

1 打死你都想不到女生还有这种操作▼2 小朋友的大哥式道歉▼3 可能舌头和尾巴对猫来说也是另一种生物吧&#xff1f;▼4 当代年轻人的发际线▼5 这一招江湖上俗称“老汉推车”▼6 身正不怕影子斜人正不怕车子歪▼7 这位大爷太过于自信了▼你点的每个赞&#xff0c;我都认…

何时使用领域驱动设计

何时使用领域驱动设计&#xff1f;其实当你的应用程序架构设计是面向业务的时候&#xff0c;你已经开始使用领域驱动设计了。领域驱动设计既不是架构风格&#xff08;Architecture Style&#xff09;&#xff0c;也不是架构模式&#xff08;Architecture Pattern&#xff09;&a…

使用MOM 2005监视DC的磁盘空间

在使用MOM 2005监视DC的磁盘空间之前首先需要在MOM 2005服务器上导入Active Directory的管理包,这样MOM 2005服务器才能够对域控制器进行管理 我来到一台计算机名称叫做MOM2005的计算机 它是一台MOM 2005管理服务器同时是一台MOM 2005报表服务器 打开MOM 2005管理控制台--按管…

php如何读出xml的节点内容 两个例子

第一个例子&#xff1a; PHP与XML联系紧密&#xff0c;下面是一个较简单的解析XML节点数据的例子&#xff0c;示例中自定义有一个XML样例文件代码&#xff0c;通过PHP将依次读取出XML节点中的id、name和email数据&#xff0c;是读取较大的XML文件的前提&#xff0c;新手的话&am…

java递归 treeview_treeview递归

1.数据库table A(ID int pk,Value varchar,Fid int)A:ID Value Fid1 value1 02 value2 03 value3 14 vlaue4 15 value5 26 value6 22.递归void BindTree(TreeNodeCollection tnc,string fid){DataView dvds.Tables[0].DefaultView;//…

latex 1图加标题_使用VsCode编译latex心得

本人最早接触latex是刘海洋老师的《latex入门》&#xff0c;大家可自行搜索相关资源查阅&#xff0c;可以作为参考书&#xff0c;不建议从头到尾的翻阅学习。学习窍门在配置好相关软件之后&#xff0c;应当立即编译一个模板&#xff0c;保证能通过。相关的模板如IEEE等学术报告…

Microsoft AJAX Client Library规范的实例

MSDN 帮助&#xff1a; ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_vwdcon/html/285e3a65-b42e-42c5-952d-baf184057899.htm Type.registerNamespace("Demo"); Demo.Person function(firstName, lastName, emailAddress) {this._firstName firstName;this._last…

这就是为什么上帝和魔鬼都喜欢数学......

全世界只有3.14 % 的人关注了爆炸吧知识是上帝的指纹还是魔鬼的聚合物两千多年来&#xff0c;几何学的研究主要集中在欧几里得几何上。正因如此&#xff0c;欧式几何中由直线或曲线、平面或曲面、平直体或曲体所构成的各种几何形状&#xff0c;一直是人类认识自然物体形状的有力…

彻底删除 XP 自带的 Windows Messenger方法

开始->运行->RunDll32 advpack.dll,LaunchINFSection %windir%\INF\msmsgs.inf,BLC.Remove 就这么简单 鲜为人知的安装和卸载绝技&#xff1a;巧用Rundll32&#xff0e;exe在Windows系统中安装和卸载程序是件非常容易的事情&#xff0c;一般用户通过安装和卸载程序向导就…

反向压力

大家好&#xff0c;我是鱼皮&#xff0c;今天分享一个实用的编程小知识 —— 反向压力。在介绍反向压力前&#xff0c;我们先聊聊什么是压力&#xff1f;什么是压力&#xff1f;我是一个打工人&#xff0c;日常工作就是听产品经理的话&#xff0c;写代码做需求。正常打工正常情…

2×3卡方检验prism_卡方独立性检验原理

这篇文章主要讲了两个部分&#xff0c;一个是卡方检验的推导&#xff0c;一个是卡方检验应该取多少样本量。卡方独立性检验是为了检验两个变量是否独立&#xff0c;我们先来回顾一下卡方独立性检验的流程&#xff1a;1、统计列联表&#xff0c;计算观察值&#xff1a;表一图中的…

不断电系统的容量如何计算?

不断电系统的容量如何计算&#xff1f;  1.目前市面上销售的不断电系统大都以VA(视在功率)为单位&#xff0c;V表示电压&#xff0c;A表示电流&#xff0c;电压乘以电流就表示功率&#xff0c;也就是不断电系统的容量&#xff1b;以一部500VA的不断电系统来说明&#xff0c;当…

AVL树----java

AVL树----java AVL树是高度平衡的二叉查找树 1.单旋转LL旋转 理解记忆&#xff1a;1.在不平衡的节点的左孩子的左孩子插入导致的不平衡&#xff0c;所以叫LL private AVLTreeNode<T> leftLeftRotation(AVLTreeNode<T> k2) {AVLTreeNode<T> k1;k1 k2.left;k2…

其实你女朋友也不是很爱你...

1 你玩她口红化妆品试试▼2 我妈介绍的相亲对象优点&#xff1a;每天主动问早缺点&#xff1a;每天只问早▼3 女儿过度高估老爸了▼4 国际油价暴跌全军出击买买买▼5 有人喜欢我吗&#xff1f;我爱吃炸鸡▼6 有厕纸的那部分人还有全球百分之50的双黄连▼7 其实生物书比较…

Gestalt - 在浏览器里用 python/ruby 写客户端脚本

Gestalt 是 Mix Online Lab 创造出来的一个框架&#xff0c;利用它我们可以在浏览器里用 python/ruby 写脚本来操纵 DHTML 的各种对象&#xff0c;其作用就跟 javascript 类似。一个例子&#xff1a;<script language"javascript"src"gestalt.js"/>&…

文末有彩蛋 | 第四周课程回顾与总结

我们在前三周的课程上&#xff08;第一周、第二周、第三周&#xff09;&#xff0c;系统讲授了 FOSS 和 COSS 的课程内容&#xff0c;第四周&#xff0c;我们开始进入 OSPO&#xff08;开源项目办公室&#xff09;的部分。本导学班在调研全球开源教育与课程的基础上&#xff0c…