public Task<bool> Lock(string address)
{
TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();
if (this.lockedAddress == "")
{
this.lockedAddress = address;
tcs.SetResult(true);
}
else
{
LockInfo lockInfo = new LockInfo(address, tcs);
this.queue.Enqueue(lockInfo);
}
return tcs.Task;
}
public async Task Lock() { ++this.lockCount; if (this.status == LockStatus.Locked) { return; } if (this.status == LockStatus.LockRequesting) { await WaitLock(); return; } this.status = LockStatus.LockRequesting; // 真身直接本地请求锁,镜像需要调用Rpc获取锁 MasterComponent masterComponent = this.GetComponent <MasterComponent>(); if (masterComponent != null) { await masterComponent.Lock(this.address); } else { RequestLock(); await WaitLock(); } }