Skip to content

Latest commit

 

History

History
133 lines (89 loc) · 5.52 KB

episode-020.md

File metadata and controls

133 lines (89 loc) · 5.52 KB

.NET 每周分享第 20 期

卷首语

关于 .NET 的偏见

这是一期非常有意思的视频,UP 主浏览了一篇 Java VS C# 的文章,虽然是发布日期就在最近,也就是 2022 年 6 月,但是文章中充满了对 C# 的偏见和无数个互相排斥的观点。

行业资讯

1、MAUI 设计网站上线

image

想要在自己 MUAI 应用程序中包含漂亮的 UI ?Snppts 网站可以帮助到你。它提供了众多的 MUAI 应用程序的 UI,并且包含源码。

文章推荐

1、Azure 开发平台

image

.NET 的开发世界里,Azure 是一个绕不开的开发平台,在这个平台上有多种服务可以选择,这篇文章介绍了 Azure 上常见的服务:

  • Window/Linux
  • 容器化
  • 微服务
  • Azure Storage/CDN
  • Static Web Apps
  • Azure App Service
  • Azure 虚拟机
  • Azure Functions
  • Azure Kubernetes Service
  • Container App
  • Service Fabric

2、集合拼接比较

将两个集合拼接起来是常见的开发需求,那么在 C# 中该如何实现呢?这篇文章尝试了多种方式,主要有

  • ListAdd 方法
  • Enumerable.Concat 方法
  • Enumerable.Union 方法
  • ListAddRange 方法
  • ArrayCopyTo 方法
  • SelectMany 方法

通过 Benchmark 比较,一般而言AddAndRange 是性能最好。

3、线程安全的异步方法

image

在同步代码中,如果要避免条件竞争,通常会选择 lock 关键字来保证任何时刻只有一个线程能够访问该资源,例如:

private object obj = new object();
lock(obj)
{
    // code
}

但是对于异步方法,首先编译器会报错,因为异步方法不能在 lock 的语句中,那么我们该怎么办呢?答案是 SemaphoreSlim 类。

private SemaphoreSlim semaphore = new SemaphoreSlim(1);

async Task DoWork()
{
    await semaphore.WaitAsync();
    await DoAnotherWork();
    semaphore.Release();
}

4、Linq 在 .NET 6 上的提升

image

LINQ.NET 平台上最强大的工具之一,它在 .NET 6 中也有新的提升,主要包含

  • FirstOrDefaultSingleOrDefault 可以指定默认返回值,而不是类型的默认值
  • MinBy, MaxBy, DistinctBy 等方法,可以指定属性
  • Chunk 方法可以将枚举类型按照相应的数量分块
  • Zip 方法支持三个枚举类型
  • 新的 IndexRange 语法糖支持

5、GC 文章推荐

image

Maoni Stephens 是微软负责 .NET GC 的架构师,这个仓库包含了她过去对 GC 内容的分享的材料,也是我们 GC 性能调优的参考资料。

开源项目

1、UnitNet

image

单位运算是开发过程中常常会遇到的问题,比如长度,面积,体积等等。这时候不仅仅需要编程的知识,还需要相应的物理知识。UnitsNet 包可以帮助你解决大部分问题。

2、.NET Community Toolkit 发布

image

最近 Community Toolkit 包已经发布,它是从 Windows Community Toolkit 演化过来,所以版本号直接变成 8.0.0 , 这次发布移除的 Windows 系统的依赖,变成一个通用的跨平台工具包。随着 MAUI 的正式发布,该包对 MUAI 提供了大量的帮助,最重要的是 MVVM 的支持。

3、Visual Studio 插件 RestClient

image

Visual Studio 有一个 Rest Client 的插件,可以直接在 Visual Studio 中执行一个 .http 的问题,该文件可以直接直接发起 HTTP 请求。

GET https://bing.com

@hostname = localhost
@port = 5143
@host = http://{{hostname}}:{{port}}
@contentType = application/json
PUT {{host}}/user/update/1
Content-Type: {{contentType}}
{
  "userName": "kchintala",
  "firstName": "Karthik",
  "lastName": "Chintala"
}

4、quartznet

quartnet 是一个开源的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET 移植,它用 C#写成,可用于各种 C#应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而 创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持 cron-like 表达式等等。