异步锁
Locker 同步和异步互斥锁。
Locker 是一个轻量互斥锁封装,用于把同步代码和异步代码中的临界区串行化。
两个范例摘自 LockerTest;COUNT 是夹具中定义的循环次数 500。测试通过并发递增最终计数验证互斥效果,而不是用延时猜测执行顺序。
同步临界区
同步代码使用 Lock() 获取一个可释放的锁句柄,离开 using 作用域时自动释放。
来源:framework/Zongsoft.Core/test/Common/LockerTest.cs(节选;上下文见源文件)。
public void Lock()
{
var count = 0;
var locker = new Locker();
Parallel.For(0, COUNT, i =>
{
using(locker.Lock())
{
count++;
}
});
Assert.Equal(COUNT, count);
}异步临界区
异步代码使用 LockAsync(),并通过 await using 释放锁。
来源:framework/Zongsoft.Core/test/Common/LockerTest.cs(节选;上下文见源文件)。
LockAsync 支持取消令牌,适合需要取消等待锁的后台任务。
相关资源
最后更新于