返回顶部
首页 > 资讯 > 精选 >.NET 6新增的API有哪些
  • 576
分享到

.NET 6新增的API有哪些

2023-06-22 05:06:18 576人浏览 八月长安
摘要

本篇内容介绍了“.net 6新增的api有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!DateOnly & Time

本篇内容介绍了“.net 6新增的api有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

DateOnly & TimeOnly

.NET 6 引入了两种期待已久的类型 - DateOnly 和 TimeOnly, 它们分别代表DateTime的日期和时间部分。

DateOnly dateOnly = new(2021, 9, 25);Console.WriteLine(dateOnly);TimeOnly timeOnly = new(19, 0, 0);Console.WriteLine(timeOnly); DateOnly dateOnlyFromDate = DateOnly.FromDateTime(DateTime.Now);Console.WriteLine(dateOnlyFromDate); TimeOnly timeOnlyFromDate = TimeOnly.FromDateTime(DateTime.Now);Console.WriteLine(timeOnlyFromDate);

Parallel.ForEachAsync

它可以控制多个异步任务的并行度。

var userHandlers = new[]{    "users/okyrylchuk",    "users/jaredpar",    "users/davidfowl"};using HttpClient client = new(){    BaseAddress = new Uri("https://api.GitHub.com"),};client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("dotnet", "6"));ParallelOptions options = new(){    MaxDegreeOfParallelism = 3};await Parallel.ForEachAsync(userHandlers, options, async (uri, token) =>{    var user = await client.GetFromJSONAsync<gitHubUser>(uri, token);    Console.WriteLine($"Name: {user.Name}\nBio: {user.Bio}\n");});public class GitHubUser{    public string Name { get; set; }    public string Bio { get; set; }}// Output:// Name: David Fowler// Bio: Partner Software Architect at Microsoft on the asp.net team, Creator of SignalR// // Name: Oleg Kyrylchuk// Bio: Software developer | Dotnet | C# | Azure// // Name: Jared Parsons// Bio: Developer on the C# compiler

ArgumentNullException.ThrowIfNull()

ArgumentNullException 的小改进, 在抛出异常之前不需要在每个方法中检查 null, 现在只需要写一行,  和 response.EnsureSuccessStatusCode(); 类似。

ExampleMethod(null);void ExampleMethod(object param){    ArgumentNullException.ThrowIfNull(param);    // Do something}

PriorityQueue

.NET 6 新增的数据结构, PriorityQueue, 队列每个元素都有一个关联的优先级,它决定了出队顺序, 编号小的元素优先出列。

PriorityQueue<string, int> priorityQueue = new();priorityQueue.Enqueue("Second", 2);priorityQueue.Enqueue("Fourth", 4);priorityQueue.Enqueue("Third 1", 3);priorityQueue.Enqueue("Third 2", 3);priorityQueue.Enqueue("First", 1);while (priorityQueue.Count > 0){    string item = priorityQueue.Dequeue();    Console.WriteLine(item);}// Output:// First// Second// Third 2// Third 1// Fourth

RandoMaccess

提供基于偏移量的 API,用于以线程安全的方式读取和写入文件。

using SafeFileHandle handle = File.OpenHandle("file.txt", access: FileAccess.ReadWrite);// Write to filebyte[] strBytes = Encoding.UTF8.GetBytes("Hello world");ReadOnlyMemory<byte> buffer1 = new(strBytes);await RandomAccess.WriteAsync(handle, buffer1, 0);// Get file lengthlong length = RandomAccess.GetLength(handle);// Read from fileMemory<byte> buffer2 = new(new byte[length]);await RandomAccess.ReadAsync(handle, buffer2, 0);string content = Encoding.UTF8.GetString(buffer2.ToArray());Console.WriteLine(content); // Hello world

PeriodicTimer

认识一个完全异步的“PeriodicTimer”, 更适合在异步场景中使用, 它有一个方法 WaitForNextTickAsync

// One constructor: public PeriodicTimer(TimeSpan period)using PeriodicTimer timer = new(TimeSpan.FromSeconds(1));while (await timer.WaitForNextTickAsync()){    Console.WriteLine(DateTime.UtcNow);}// Output:// 13 - Oct - 21 19:58:05 PM// 13 - Oct - 21 19:58:06 PM// 13 - Oct - 21 19:58:07 PM// 13 - Oct - 21 19:58:08 PM// 13 - Oct - 21 19:58:09 PM// 13 - Oct - 21 19:58:10 PM// 13 - Oct - 21 19:58:11 PM// 13 - Oct - 21 19:58:12 PM// ...

Metrics API

.NET 6 实现了 OpenTelemetry Metrics API 规范, 内置了指标API, 通过 Meter 类创建下面的指标

  • Counter

  • Histogram

  • ObservableCounter

  • ObservableGauge

使用的方法如下:

var builder = WEBApplication.CreateBuilder(args);var app = builder.Build();// Create Metervar meter = new Meter("MetricsApp", "v1.0");// Create counterCounter<int> counter = meter.CreateCounter<int>("Requests");app.Use((context, next) =>{    // Record the value of measurement    counter.Add(1);    return next(context);});app.MapGet("/", () => "Hello World");StartMeterListener();app.Run();// Create and start Meter Listenervoid StartMeterListener(){    var listener = new MeterListener();    listener.InstrumentPublished = (instrument, meterListener) =>    {        if (instrument.Name == "Requests" && instrument.Meter.Name == "MetricsApp")        {            // Start listening to a specific measurement recording            meterListener.EnableMeasurementEvents(instrument, null);        }    };    listener.SetMeasurementEventCallback<int>((instrument, measurement, tags, state) =>    {        Console.WriteLine($"Instrument {instrument.Name} has recorded the measurement: {measurement}");    });    listener.Start();}

检查元素是否可为空的反射API

它提供来自反射成员的可空性信息和上下文:

  • ParameterInfo 参数

  • FieldInfo 字段

  • PropertyInfo 属性

  • EventInfo 事件

var example = new Example();var nullabilityInfoContext = new NullabilityInfoContext();foreach (var propertyInfo in example.GetType().GetProperties()){    var nullabilityInfo = nullabilityInfoContext.Create(propertyInfo);    Console.WriteLine($"{propertyInfo.Name} property is {nullabilityInfo.WriteState}");}// Output:// Name property is Nullable// Value property is NotNullclass Example{    public string? Name { get; set; }    public string Value { get; set; }}

检查嵌套元素是否可为空的反射API

它允许您获取嵌套元素的可为空的信息, 您可以指定数组属性必须为非空,但元素可以为空,反之亦然。

Type exampleType = typeof(Example);PropertyInfo notNullableArrayPI = exampleType.GetProperty(nameof(Example.NotNullableArray));PropertyInfo nullableArrayPI = exampleType.GetProperty(nameof(Example.NullableArray));NullabilityInfoContext nullabilityInfoContext = new();NullabilityInfo notNullableArrayNI = nullabilityInfoContext.Create(notNullableArrayPI);Console.WriteLine(notNullableArrayNI.ReadState);              // NotNullConsole.WriteLine(notNullableArrayNI.ElementType.ReadState);  // NullableNullabilityInfo nullableArrayNI = nullabilityInfoContext.Create(nullableArrayPI);Console.WriteLine(nullableArrayNI.ReadState);                // NullableConsole.WriteLine(nullableArrayNI.ElementType.ReadState);    // Nullableclass Example{    public string?[] NotNullableArray { get; set; }    public string?[]? NullableArray { get; set; }}

ProcessId & ProcessPath

直接通过 Environment 获取进程ID和路径。

int processId = Environment.ProcessIdstring path = Environment.ProcessPath;Console.WriteLine(processId);Console.WriteLine(path);

Configuration 新增 GetRequiredSection()

和 DI 的 GetRequiredService() 是一样的, 如果缺失, 则会抛出异常。

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);WebApplication app = builder.Build();MySettings mySettings = new();// Throws InvalidOperationException if a required section of configuration is missingapp.Configuration.GetRequiredSection("MySettings").Bind(mySettings);app.Run();class MySettings{    public string? SettingValue { get; set; }}

CSPNG 密码安全伪随机数生成器

您可以从密码安全伪随机数生成器 (CSPNG) 轻松生成随机值序列。

它对于以下场景中很有用:

密钥生成

随机数

某些签名方案中的盐

// Fills an array of 300 bytes with a cryptographically strong random sequence of values.// GetBytes(byte[] data);// GetBytes(byte[] data, int offset, int count)// GetBytes(int count)// GetBytes(Span<byte> data)byte[] bytes = RandomNumberGenerator.GetBytes(300);

Native Memory API

.NET 6 引入了一个新的 API 来分配本机内存,  NativeMemory 有分配和释放内存的方法。

unsafe{    byte* buffer = (byte*)NativeMemory.Alloc(100);    NativeMemory.Free(buffer);    }

Power of 2

.NET 6 引入了用于处理 2 的幂的新方法。

  • 'IsPow2'   判断指定值是否为 2 的幂。

  • 'RoundUpToPowerOf2' 将指定值四舍五入到 2 的幂。

// IsPow2 evaluates whether the specified Int32 value is a power of two.Console.WriteLine(BitOperations.IsPow2(128));            // True// RoundUpToPowerOf2 rounds the specified T:System.UInt32 value up to a power of two.Console.WriteLine(BitOperations.RoundUpToPowerOf2(200)); // 256

WaitAsync on Task

您可以更轻松地等待异步任务执行, 如果超时会抛出 “TimeoutException”

Task operationTask = DoSomethingLongAsync();await operationTask.WaitAsync(TimeSpan.FromSeconds(5));async Task DoSomethingLongAsync(){    Console.WriteLine("DoSomethingLongAsync started.");    await Task.Delay(TimeSpan.FromSeconds(10));    Console.WriteLine("DoSomethingLongAsync ended.");}// Output:// DoSomethingLongAsync started.// Unhandled exception.System.TimeoutException: The operation has timed out.

新的数学API

新方法:

  • SinCos

  • ReciprocalEstimate

  • ReciprocalSqrtEstimate

新的重载:

  • Min, Max, Abs, Sign, Clamp 支持 nint 和 nuint

  • DivRem 返回一个元组, 包括商和余数。

// New methods SinCos, ReciprocalEstimate and ReciprocalSqrtEstimate// Simultaneously computes Sin and Cos(double sin, double cos) = Math.SinCos(1.57);Console.WriteLine($"Sin = {sin}\nCos = {cos}");// Computes an approximate of 1 / xdouble recEst = Math.ReciprocalEstimate(5);Console.WriteLine($"Reciprocal estimate = {recEst}");// Computes an approximate of 1 / Sqrt(x)double recSqrtEst = Math.ReciprocalSqrtEstimate(5);Console.WriteLine($"Reciprocal sqrt estimate = {recSqrtEst}");// New overloads// Min, Max, Abs, Clamp and Sign supports nint and nuint(nint a, nint b) = (5, 10);nint min = Math.Min(a, b);nint max = Math.Max(a, b);nint abs = Math.Abs(a);nint clamp = Math.Clamp(abs, min, max);nint sign = Math.Sign(a);Console.WriteLine($"Min = {min}\nMax = {max}\nAbs = {abs}");Console.WriteLine($"Clamp = {clamp}\nSign = {sign}");// DivRem variants return a tuple(int quotient, int remainder) = Math.DivRem(2, 7);Console.WriteLine($"Quotient = {quotient}\nRemainder = {remainder}");// Output:// Sin = 0.9999996829318346// Cos = 0.0007963267107331026// Reciprocal estimate = 0.2// Reciprocal sqrt estimate = 0.4472135954999579// Min = 5// Max = 10// Abs = 5// Clamp = 5// Sign = 1// Quotient = 0// Remainder = 2

CollectionsMarshal.GetValueRefOrNullRef

这个是在字典中循环或者修改结可变结构体时用,  可以减少结构的副本复制,  也可以避免字典重复进行哈希计算,这个有点晦涩难懂,有兴趣的可以看看这个

https://github.com/dotnet/runtime/issues/27062

Dictionary<int, MyStruct> dictionary = new(){    { 1, new MyStruct { Count = 100 } }};int key = 1;ref MyStruct value = ref CollectionsMarshal.GetValueRefOrNullRef(dictionary, key);// Returns Unsafe.NullRef<TValue>() if it doesn't exist; check using Unsafe.IsNullRef(ref value)if (!Unsafe.IsNullRef(ref value)){    Console.WriteLine(value.Count); // Output: 100    // Mutate in-place    value.Count++;    Console.WriteLine(value.Count); // Output: 101}struct MyStruct{    public int Count { get; set; }}

ConfigureHostOptions

IHostBuilder 上的新 ConfigureHostOptions API, 可以更简单的配置应用。

public class Program{    public static void Main(string[] args)    {        CreateHostBuilder(args).Build().Run();    }    public static IHostBuilder CreateHostBuilder(string[] args) =>        Host.CreateDefaultBuilder(args)            .ConfigureHostOptions(o =>            {                o.ShutdownTimeout = TimeSpan.FromMinutes(10);            });}

Async Scope

.NET 6 引入了一种新的CreateAsyncScope方法, 当您处理 IAsyncDisposable 的服务时现有的CreateScope方法会引发异常, 使用  CreateAsyncScope 可以完美解决。

await using var provider = new ServiceCollection()        .AddScoped<Example>()        .BuildServiceProvider();await using (var scope = provider.CreateAsyncScope()){    var example = scope.ServiceProvider.GetRequiredService<Example>();}class Example : IAsyncDisposable{    public ValueTask DisposeAsync() => default;}

加密类简化

  • DecryptCbc

  • DecryptCfb

  • DecryptEcb

  • EncryptCbc

  • EncryptCfb

  • EncryptEcb

static byte[] Decrypt(byte[] key, byte[] iv, byte[] ciphertext){    using (Aes aes = Aes.Create())    {        aes.Key = key;        return aes.DecryptCbc(ciphertext, iv, PaddingMode.PKCS7);    }}

“.NET 6新增的API有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: .NET 6新增的API有哪些

本文链接: https://lsjlt.com/news/302678.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • .NET 6新增的API有哪些
    本篇内容介绍了“.NET 6新增的API有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!DateOnly & Time...
    99+
    2023-06-22
  • .NET 6新增的20个API介绍
    DateOnly & TimeOnly .NET 6 引入了两种期待已久的类型 - DateOnly 和 TimeOnly, 它们分别代表DateTime的日期和时间部分。 ...
    99+
    2024-04-02
  • Ubuntu中的.NET 6有哪些特点
    .NET 6是Ubuntu操作系统上的一个重要更新,具有以下特点:1. 支持多种应用类型:.NET 6支持多种类型的应用程序开发,包...
    99+
    2023-09-29
    Ubuntu
  • PHP 6新增多项特性及重要改进有哪些
    这期内容当中小编将会给大家带来有关PHP 6新增多项特性及重要改进有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。PHP下一个备受关注的6.0版本,已经进入snaps...
    99+
    2024-04-02
  • ES11新增的新特性有哪些
    本篇内容介绍了“ES11新增的新特性有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ECMAScrip...
    99+
    2024-04-02
  • Java5、6、7中的新特性有哪些
    Java5、6、7中的新特性有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java5:泛型 Generics:引用泛型之后,允许指定集合里元素的类型,免去了强制类型转换,...
    99+
    2023-05-31
    java5 java6 java7
  • es6的新增特性有哪些
    这篇文章主要介绍“es6的新增特性有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“es6的新增特性有哪些”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • es6新增的扩展有哪些
    这篇“es6新增的扩展有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“es6新增的扩展...
    99+
    2024-04-02
  • CSS3新增的属性有哪些
    这篇文章将为大家详细讲解有关CSS3新增的属性有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 CSS 用于控制网页的样式和布局。CSS3 是最新的 CSS...
    99+
    2024-04-02
  • NumPy新增的功能有哪些
    本篇内容主要讲解“NumPy新增的功能有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“NumPy新增的功能有哪些”吧!作为 Python 语言的一个扩展程序...
    99+
    2024-04-02
  • css3新增的单位有哪些
    本文小编为大家详细介绍“css3新增的单位有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“css3新增的单位有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 ...
    99+
    2024-04-02
  • PHP7.4的新增特性有哪些
    这篇文章将为大家详细讲解有关PHP7.4的新增特性有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHPPHP 7里程版本PHP 7.4于2019年11月28日正式发布。因此,现在该让我们深入研究一些...
    99+
    2023-06-14
  • JDK15新增的功能有哪些
    本篇内容介绍了“JDK15新增的功能有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!发布版本说明根据发布的规划,这次发布的 JDK 15...
    99+
    2023-06-27
  • html5新增的标签有哪些
    本教程操作环境:windows7系统、HTML5版、Dell G3电脑。HTML5是HTML的最新版本,由W3C在2014年完成标准定制。增强的浏览器本机功能,减少了浏览器插件(如:flash)应用程序,提高了用户体验满意度,使开发更加方便...
    99+
    2022-11-23
    html5
  • PHP的新增特性有哪些?
    php 的新特性包括:标量类型声明(提升代码可读性和维护性)、匿名类(方便创建一次性对象)、返回类型声明(静态分析和提高维护性)、空间船操作符(比较表达式值)、null 合并运算符(提供...
    99+
    2024-04-13
    php 新特性 代码可读性
  • MySQL6.0新增特性有哪些
    小编给大家分享一下MySQL6.0新增特性有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!* 对子查询和Join进行了优化,...
    99+
    2024-04-02
  • html5新增标签有哪些
    这篇文章给大家分享的是有关html5新增标签有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。   html5新增标签有:1、video,表示一段视频并提供播放的用户界面;2...
    99+
    2024-04-02
  • es6新增循环有哪些
    本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。以前for循环,for in循环;而ES6新增循环:for of 循环:遍历(迭代,循环)整个对象。for..ofES6新增了一个for..of循环,在迭...
    99+
    2022-11-22
    javascript ES6 循环遍历 循环结构
  • .Net Core 3.1 Web API基础知识有哪些
    这篇“.Net Core 3.1 Web API基础知识有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,...
    99+
    2023-06-30
  • CSS3新增的伪类都有哪些
    CSS3新增的伪类都有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先大家应该都知道css是什么吧?     ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作