private static async Task CheckStaticPeersAsync( IEnumerable <BoundPeer> peers, RoutingTable table, KademliaProtocol protocol, CancellationToken cancellationToken) { var boundPeers = peers as BoundPeer[] ?? peers.ToArray(); while (!cancellationToken.IsCancellationRequested) { try { await Task.Delay(TimeSpan.FromMinutes(1), cancellationToken); Log.Warning("Checking static peers. {@Peers}", boundPeers); var peersToAdd = boundPeers.Where(peer => !table.Contains(peer)).ToArray(); if (peersToAdd.Any()) { Log.Warning("Some of peers are not in routing table. {@Peers}", peersToAdd); await protocol.AddPeersAsync( peersToAdd, TimeSpan.FromSeconds(5), cancellationToken); } } catch (OperationCanceledException e) { Log.Warning(e, $"{nameof(CheckStaticPeersAsync)}() is cancelled."); throw; } catch (Exception e) { var msg = "Unexpected exception occurred during " + $"{nameof(CheckStaticPeersAsync)}(): {{0}}"; Log.Warning(e, msg, e); } } }