public Task<USocket> AcceptAsync()
{
if (this.AcceptTcs != null)
{
throw new Exception("do not accept twice!");
}
var tcs = new TaskCompletionSource<USocket>();
// 如果有请求连接缓存的包,从缓存中取
if (this.connQueue.Count > 0)
{
IntPtr ptr = this.connQueue.FirstKey;
this.connQueue.Remove(ptr);
USocket socket = new USocket(ptr, this);
this.USocketManager.Add(ptr, socket);
tcs.SetResult(socket);
}
else
{
this.AcceptTcs = tcs;
}
return tcs.Task;
}