tnblog
首页
视频
资源
登录

.Net6 AsyncEx 异步锁

5832人阅读 2022/7/1 16:28 总访问:3467321 评论:0 收藏:0 手机
分类: .net后台框架

.netcore

.Net6 AsyncEx


简单来讲就是可以通过异步方式实现锁。

安装

  1. <PackageReference Include="Nito.AsyncEx" Version="5.1.2" />

测试代码


可以通过LockAsync,Lock方法实现锁,当我们自定义锁的Token时,在锁中执行时常超过了Token时限将会自动抛出OperationCanceledException异常。

  1. [TestClass]
  2. public class TestAsyncEx
  3. {
  4. [TestMethod]
  5. public async void TestUseLockAsync()
  6. {
  7. await UseLockAsync();
  8. }
  9. private readonly AsyncLock _mutex = new AsyncLock();
  10. public async Task UseLockAsync()
  11. {
  12. // AsyncLock可以异步锁定
  13. using (await _mutex.LockAsync())
  14. {
  15. // 锁在那里等待是安全的
  16. await Task.Delay(TimeSpan.FromSeconds(1));
  17. }
  18. }
  19. [TestMethod]
  20. public async Task TestUseLockAsyncToken()
  21. {
  22. try
  23. {
  24. await UseLockAsyncToken();
  25. }
  26. catch (OperationCanceledException ex)
  27. {
  28. throw;
  29. }
  30. }
  31. public async Task UseLockAsyncToken()
  32. {
  33. // 仅尝试锁定2秒钟。
  34. var cts = new CancellationTokenSource(TimeSpan.FromSeconds(2));
  35. // 如果2秒后锁不可用,这将引发OperationCanceledException。
  36. using (await _mutex.LockAsync(cts.Token))
  37. {
  38. await Task.Delay(TimeSpan.FromSeconds(10), cts.Token);
  39. }
  40. }
  41. [TestMethod]
  42. public void TestUseLock()
  43. {
  44. UseLock();
  45. }
  46. public void UseLock()
  47. {
  48. using (_mutex.Lock())
  49. {
  50. Thread.Sleep(TimeSpan.FromSeconds(1));
  51. }
  52. }
  53. }

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

cAPS.net 保存base64位格式的图片

publicvoidUpload() { //取出图片对应的base64位字符 stringimgBase=Request[&quot;imgBase&quot;]; //c#里边的base6...

Quartz.net实例动态改变周期调度。misfire、Cron

Quartz:Java编写的开源的任务调度作业框架 类似Timer之类定时执行的功能,但是更强大Quartz.NET:是把Quartz转成C# NuGet...

.net Windows服务发布、安装、卸载、监听脚本。服务调试

一、脚本 为方便不用每次都去写安装卸载的脚本1.安装脚本@echooff @echo开始安装【服务】 %SystemRoot%\Microsoft.NET\Fr...

c、VB.net中全角半角转换方法

///&lt;summary&gt; ///转全角的函数(SBCcase) ///&lt;/summary&gt; ///&lt;paramname=&quot;input&quot;&gt;任意字符串...

.net mvc分部页,.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

C.net 配合小程序实现经过第三方服务器中转文件

某些时候,微信小程序前段上传文件的时候需要经过第三方服务器再将文件上传到客户的服务器;操作如下:1:(小程序内向中端服...

.net实现QQ邮箱发送邮件功能

1、微软已经帮我们封装好了发送邮件的类MailMessage,MailMessage类构造一些邮件信息,然后通过SmtpClient进行邮件发送。Mai...

StackExchange.Redis操作redis(net core支持)

官方git开源地址https://github.com/StackExchange/StackExchange.Redis官方文档在docs里边都是官方的文档通过nuget命令下...

windows 自带的netsh进行端口映射

使用netsh 把本地任意ip的25566端口 映射到192.168.81.234的25565端口netshinterfaceportproxyaddv4tov4listenaddress=0.0....

确保.net程序始终以管理员身份运行

usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; ...

ASP.net Timer细节处理

Timer的用法:1:本人称之为计时器,是asp.net官方的一种。用法即是计时所用 2:关于计时有很多中方式,本人学识有限,暂...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...

通俗易懂,什么是.net?什么是.net Framework?什么是.net core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

asp.net core2.0 依赖注入 AddTransient与AddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术