
.Net6 AsyncEx
简单来讲就是可以通过异步方式实现锁。
安装
<PackageReference Include="Nito.AsyncEx" Version="5.1.2" />
测试代码
可以通过LockAsync
,Lock
方法实现锁,当我们自定义锁的Token时,在锁中执行时常超过了Token时限将会自动抛出OperationCanceledException
异常。
[TestClass]
public class TestAsyncEx
{
[TestMethod]
public async void TestUseLockAsync()
{
await UseLockAsync();
}
private readonly AsyncLock _mutex = new AsyncLock();
public async Task UseLockAsync()
{
// AsyncLock可以异步锁定
using (await _mutex.LockAsync())
{
// 锁在那里等待是安全的
await Task.Delay(TimeSpan.FromSeconds(1));
}
}
[TestMethod]
public async Task TestUseLockAsyncToken()
{
try
{
await UseLockAsyncToken();
}
catch (OperationCanceledException ex)
{
throw;
}
}
public async Task UseLockAsyncToken()
{
// 仅尝试锁定2秒钟。
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(2));
// 如果2秒后锁不可用,这将引发OperationCanceledException。
using (await _mutex.LockAsync(cts.Token))
{
await Task.Delay(TimeSpan.FromSeconds(10), cts.Token);
}
}
[TestMethod]
public void TestUseLock()
{
UseLock();
}
public void UseLock()
{
using (_mutex.Lock())
{
Thread.Sleep(TimeSpan.FromSeconds(1));
}
}
}
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 :
好是好,这个对效率影响大不大哇,效率高不高
一个bug让程序员走上法庭 索赔金额达400亿日元
剑轩 : 有点可怕
ASP.NET Core 服务注册生命周期
剑轩 :
http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术