现在是否有与 AsyncEx 的 AsyncLock 等效的 .NET SDK?

Is there now a .NET SDK equivalent to AsyncEx's AsyncLock?

提问人:Jez 提问时间:10/25/2023 最后编辑:Theodor ZouliasJez 更新时间:10/30/2023 访问量:88

问:

我正在阅读这个问题,在撰写本文时,有两个异步锁定原语在 C# 中被广泛使用;来自 AsyncEx 库的 AsyncLock,以及 Scott Hanselman 的 AsyncLock(基于 Stephen Toub 的 AsyncLock)。两者都不受 Microsoft 的正式支持,对于像同步原语这样基本的东西,我真的更喜欢使用实际上位于 .NET SDK/框架中的锁,并且是官方的。

Microsoft有没有正式推出任何官方的东西?即。异步等同于块?如果没有,是否有计划这样做?这似乎是一个相当大的疏忽。我知道您可以使用来实现异步互斥锁,但它仍然不是一个合适的锁定类。lockSemaphoreSlim

正确的锁定类:提供 IDisposable 发布器的类,以便它可以与 using 语句一起使用。

C# .NET 异步 async-await 线程同步

评论

0赞 Hank 10/25/2023
来自 Eric Lippert(C# 设计人员之一)。为什么没有实现:stackoverflow.com/questions/7612602/......
1赞 Theodor Zoulias 10/25/2023
“我知道你可以使用 SemaphoreSlim 来实现异步互斥锁,但它仍然不是一个合适的锁定类。”-- 为什么会这样?
0赞 Jez 10/25/2023
@Hank 你会注意到我评论了这个答案,因为我认为它解释得很糟糕,并从埃里克·利珀特那里得到了一个聪明的答案。无论如何,我不是在这里谈论在语句中使用,我专门谈论的是设计为在异步上下文中工作的基元。awaitlock
0赞 Jez 10/25/2023
@TheodorZoulias如果是这样,就不需要 Scott Hanselman 的 AsyncLock。它提供了一个发布器,并且是 .IDisposableSemaphoreSlim
1赞 Theodor Zoulias 10/25/2023
所以你说这不是一个合适的锁定类,因为它没有提供释放器?好吧,Monitor 也没有提供发布器(至少今天没有)。互斥锁也没有。您认为 .NET 目前也缺乏用于同步同步的适当锁定类吗?SemaphoreSlimIDisposable

答:

1赞 Theodor Zoulias 10/27/2023 #1

Microsoft有没有正式推出任何官方的东西?

不。目前有一种新类型的发展,旨在作为 lock 语句的替代。AFAIK 在 C# 语言或 .NET 运行时中没有任何关于语句或类型的内容。Lockawait lockAsyncLock