public static async Task <RpcStatus> GetRpcStatusAsync(this IRPCClient rpc, CancellationToken cancel) { try { var bci = await rpc.GetBlockchainInfoAsync().ConfigureAwait(false); cancel.ThrowIfCancellationRequested(); var pi = await rpc.GetPeersInfoAsync().ConfigureAwait(false); return(RpcStatus.Responsive(bci.Headers, bci.Blocks, pi.Length)); } catch (Exception ex) when(!(ex is OperationCanceledException || ex is TaskCanceledException || ex is TimeoutException)) { Logger.LogTrace(ex); return(RpcStatus.Unresponsive); } }