C# dotnet 使用 AsyncEx 库的 AsyncLock 异步锁
时间:2022-07-25
本文章向大家介绍C# dotnet 使用 AsyncEx 库的 AsyncLock 异步锁,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文来安利大家一个好用的库 AsyncEx 库。这个库有一个强大的功能是支持 AsyncLock 异步锁。小伙伴都知道,在 C# 里面的 lock 关键字,在 2020 年也就是 C# 9.0 都没有让这个关键字能支持锁内部添加异步方法。此时在一些需要做异步线程安全的业务就比较坑了,而 AsyncEx 库提供了 AsyncLock 异步锁的功能,可以支持在锁里面使用异步
使用之前先安装 Nito.AsyncEx NuGet 库,如果是 SDK 风格的项目格式,可以在 csproj 添加下面代码
<PackageReference Include="Nito.AsyncEx" Version="5.0.0" />
简单的使用方法如下
private readonly AsyncLock _mutex = new AsyncLock();
public async Task UseLockAsync()
{
using (await _mutex.LockAsync())
{
await Task.Delay(TimeSpan.FromSeconds(1));
}
}
而 AsyncLock 其实是 Nito.AsyncEx 库的基础,在 AsyncEx 库还包括了 AsyncManualResetEvent
, AsyncAutoResetEvent
, AsyncConditionVariable
, AsyncMonitor
, AsyncSemaphore
, AsyncCountdownEvent
和 AsyncReaderWriterLock
的实现
- linux:nohup 不生成 nohup.out的方法
- 让VIM支持Python2 by update-alternatives
- Angular中ngCookies模块介绍
- 如何让jboss eap 6.2+ 的多个war应用共享 jar 包?
- scala 学习笔记(07) 一等公民的函数
- 让BASH,VIM美美的Powerline
- 极品三数666.cn易主,价格让人大惊!
- ui-router中使用ocLazyLoad和resolve
- rpc框架之 avro 学习 2 - 高效的序列化
- rpc框架之HA/负载均衡构架设计
- 使用Docker-Docker for Web Developers(2)
- 打造高效前端工作环境-tmuxinator
- 在Linux Mint上安装node.js和npm
- JS魔法堂:再识Number type
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Go服务迁到K8s后老抽风重启? 记一次完整的线上问题解决过程
- PHP的另一个高效缓存扩展:Yac
- 在PHP中操作临时文件
- 在线IDE开发入门之从零实现一个在线代码编辑器
- 树莓派4裸机基础教程:从hello world开始
- 基于f2从零实现移动端可视化编辑器
- GORM V2 读操作
- Kubernetes 1.19.0——Pod(1)
- GORM V2 写操作
- Selenium自动化最佳实践技巧(下)
- Selenium自动化最佳实践技巧(中)
- 图解内存匿名反向映射reverse mapping
- 2020-09-18:LRU手撸,说下时间复杂度和空间复杂度。
- 生产RabbitMQ队列阻塞该如何处理?
- 面试问到AOP就该这样回答