/// <summary> /// Validate peer by send <see cref="Ping"/> to <paramref name="peer"/>. If target peer /// does not responds, remove it from the table. /// </summary> /// <param name="peer">A <see cref="BoundPeer"/> to validate.</param> /// <param name="timeout">Timeout for waiting reply of <see cref="Ping"/>.</param> /// <param name="cancellationToken">A cancellation token used to propagate notification /// that this operation should be canceled.</param> /// <returns>An awaitable task without value.</returns> /// <exception cref="TimeoutException"> /// Thrown when validation fails in given <paramref name="timeout"/>. /// </exception> private async Task ValidateAsync( BoundPeer peer, TimeSpan timeout, CancellationToken cancellationToken = default(CancellationToken)) { try { _logger.Verbose("Start to validate a peer: {Peer}", peer); DateTimeOffset check = DateTimeOffset.UtcNow; await PingAsync(peer, timeout, cancellationToken); _table.Check(peer, check, DateTimeOffset.UtcNow); } catch (PingTimeoutException) { _logger.Verbose("Peer {Peer} is invalid, removing...", peer); RemovePeer(peer); throw new TimeoutException($"Timeout occurred during {nameof(ValidateAsync)}"); } }
/// <summary> /// Validate peer by send <see cref="Ping"/> to <paramref name="peer"/>. If target peer /// does not responds, remove it from the table. /// </summary> /// <param name="peer">A <see cref="BoundPeer"/> to validate.</param> /// <param name="timeout">Timeout for waiting reply of <see cref="Ping"/>.</param> /// <param name="cancellationToken">A cancellation token used to propagate notification /// that this operation should be canceled.</param> /// <returns>An awaitable task without value.</returns> private async Task ValidateAsync( BoundPeer peer, TimeSpan timeout, CancellationToken cancellationToken = default(CancellationToken)) { try { _logger.Debug("Start to validate a peer: {Peer}", peer); DateTimeOffset check = DateTimeOffset.UtcNow; await PingAsync(peer, timeout, cancellationToken); _routing.Check(peer, check, DateTimeOffset.UtcNow); } catch (TimeoutException) { _logger.Debug("Peer {Peer} is invalid, removing...", peer); RemovePeer(peer); throw; } }