私が達成する必要があるのは:
- 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の各スレーブに2つの異なるロックを使用することを考えていましたが、1つのロックが別のロックになります:
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 を使用した場合、それは意味があり、安全ですか(デッドロックなど)?