For the complete documentation index, see llms.txt. This page is also available as Markdown.

异步锁

Locker 同步和异步互斥锁。

Locker 是一个轻量互斥锁封装,用于把同步代码和异步代码中的临界区串行化。

两个范例摘自 LockerTest;COUNT 是夹具中定义的循环次数 500。测试通过并发递增最终计数验证互斥效果,而不是用延时猜测执行顺序。

同步临界区

同步代码使用 Lock() 获取一个可释放的锁句柄,离开 using 作用域时自动释放。

来源:framework/Zongsoft.Core/test/Common/LockerTest.cs(节选;上下文见源文件)。

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 支持取消令牌,适合需要取消等待锁的后台任务。

如果需要创建变更令牌,请参阅 Notification;如果需要表达操作失败原因,请参阅 OperationException。

相关资源

最后更新于