public Task <bool> Lock(string address) { if (this.lockedAddress == "") { this.lockedAddress = address; return(Task.FromResult(true)); } TaskCompletionSource <bool> tcs = new TaskCompletionSource <bool>(); LockInfo lockInfo = new LockInfo(address, tcs); this.queue.Enqueue(lockInfo); return(tcs.Task); }
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 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 void Release(string address) { if (this.lockedAddress != address) { Log.Error($"解锁地址与锁地址不匹配! {this.lockedAddress} {address}"); return; } if (this.queue.Count == 0) { this.lockedAddress = ""; return; } LockInfo lockInfo = this.queue.Dequeue(); this.lockedAddress = lockInfo.Address; lockInfo.Tcs.SetResult(true); }
public void Release(IPEndPoint address) { if (!this.lockedAddress.Equals(address)) { Log.Error($"解锁地址与锁地址不匹配! {this.lockedAddress} {address}"); return; } if (this.queue.Count == 0) { this.lockedAddress = null; return; } LockInfo lockInfo = this.queue.Dequeue(); this.lockedAddress = lockInfo.Address; lockInfo.Tcs.SetResult(true); }