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;
		}
Exemple #3
0
        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);
        }