internal async void RegisterAckTask(AckTask ackTask) { lock (Locker) { if (AckTaskList.TryAdd(ackTask.Ack.Value, ackTask)) { } else { // 理论上是找不到的 } } await ackTask.Task.Task; lock (Locker) { if (AckTaskList.Remove(ackTask.Ack.Value, out var removedTask)) { Debug.Assert(ReferenceEquals(removedTask, ackTask)); } else { Debug.Assert(false, "收到的一定存在"); } } }
public Ack GetAck() { lock (Locker) { CurrentAck = CurrentAck.Value + 1; while (AckTaskList.TryGetValue(CurrentAck.Value, out _)) { CurrentAck = CurrentAck.Value + 1; } } return(CurrentAck); }
internal void OnAckReceived(object?sender, AckArgs e) { AckTask ackTask; lock (Locker) { if (!AckTaskList.TryGetValue(e.Ack.Value, out ackTask !)) { // 被干掉了,也许是因为等待太久 return; } } if (ackTask.PeerName.Equals(e.PeerName)) { // 此时也许是等待太久 ackTask.Task.TrySetResult(true); } else { // 不是发生给这个客户端的,只是 ack 相同,这个类被改错 } }