我需要实现的是:
- 当 MasterAsync 正在执行时,HumbleSlave1Async 和 HumbleSlave2Async 不能。
- 反之亦然 - 当一个或两个从属设备正在执行时,MasterAsync 不能。
- 困难的部分-奴隶不能互相阻挡。
(链接到使用的AsyncLock)。
private async Task MasterAsync()
{
using (await _asyncLock.LockAsync())
{
await Task.Delay(2000);
}
}
private async Task HumbleSlave1Async()
{
using (await _asyncLock.LockAsync())
{
await Task.Delay(5000);
}
}
private async Task HumbleSlave2Async()
{
using (await _asyncLock.LockAsync())
{
await Task.Delay(5000);
}
}
我不知道如何解决它,正在考虑为 MasterAsync 中的每个从站使用两个不同的锁,但是一个锁将在另一个锁中:
private async Task MasterAsync()
{
using (await _asyncLock1.LockAsync())
{
using (await _asyncLock2.LockAsync())
{
await Task.Delay(2000);
}
}
}
private async Task HumbleSlave1Async()
{
using (await _asyncLock1.LockAsync())
{
await Task.Delay(5000);
}
}
private async Task HumbleSlave2Async()
{
using (await _asyncLock2.LockAsync())
{
await Task.Delay(5000);
}
}
它是否有意义并且是否安全(死锁等),尤其是当我使用 AsyncLock 时?