public async Task StopAsync() { if (_logger.IsInfo) { _logger.Info("Shutting down..."); } _runnerCancellation.Cancel(); if (_logger.IsInfo) { _logger.Info("Stopping rlpx peer..."); } var rlpxPeerTask = _rlpxPeer?.Shutdown() ?? Task.CompletedTask; if (_logger.IsInfo) { _logger.Info("Stopping sesison monitor..."); } _sessionMonitor?.Stop(); if (_logger.IsInfo) { _logger.Info("Stopping peer manager..."); } var peerManagerTask = _peerManager?.StopAsync() ?? Task.CompletedTask; if (_logger.IsInfo) { _logger.Info("Stopping sync manager..."); } var syncManagerTask = _syncManager?.StopAsync() ?? Task.CompletedTask; if (_logger.IsInfo) { _logger.Info("Stopping block producer..."); } var blockProducerTask = _blockProducer?.StopAsync() ?? Task.CompletedTask; if (_logger.IsInfo) { _logger.Info("Stopping blockchain processor..."); } var blockchainProcessorTask = (_blockchainProcessor?.StopAsync() ?? Task.CompletedTask); if (_logger.IsInfo) { _logger.Info("Stopping discovery app..."); } var discoveryStopTask = _discoveryApp?.StopAsync() ?? Task.CompletedTask; await Task.WhenAll(discoveryStopTask, rlpxPeerTask, peerManagerTask, syncManagerTask, blockchainProcessorTask, blockProducerTask); if (_logger.IsInfo) { _logger.Info("Closing DBs..."); } _dbProvider.Dispose(); if (_logger.IsInfo) { _logger.Info("Ethereum shutdown complete... please wait for all components to close"); } }
public async Task StopAsync() { if (_logger.IsInfo) { _logger.Info("Shutting down..."); } _runnerCancellation.Cancel(); if (_logger.IsInfo) { _logger.Info("Stopping rlpx peer..."); } var rlpxPeerTask = _rlpxPeer?.Shutdown() ?? Task.CompletedTask; if (_logger.IsInfo) { _logger.Info("Stopping sesison monitor..."); } _sessionMonitor?.Stop(); if (_logger.IsInfo) { _logger.Info("Stopping peer manager..."); } var peerManagerTask = _peerManager?.StopAsync() ?? Task.CompletedTask; if (_logger.IsInfo) { _logger.Info("Stopping synchronizer..."); } var synchronizerTask = (_synchronizer?.StopAsync() ?? Task.CompletedTask) .ContinueWith(t => _synchronizer?.Dispose()); if (_logger.IsInfo) { _logger.Info("Stopping sync peer pool..."); } var peerPoolTask = _syncPeerPool?.StopAsync() ?? Task.CompletedTask; if (_logger.IsInfo) { _logger.Info("Stopping block producer..."); } var blockProducerTask = _blockProducer?.StopAsync() ?? Task.CompletedTask; if (_logger.IsInfo) { _logger.Info("Stopping blockchain processor..."); } var blockchainProcessorTask = (_blockchainProcessor?.StopAsync() ?? Task.CompletedTask); if (_logger.IsInfo) { _logger.Info("Stopping discovery app..."); } var discoveryStopTask = _discoveryApp?.StopAsync() ?? Task.CompletedTask; await Task.WhenAll(discoveryStopTask, rlpxPeerTask, peerManagerTask, synchronizerTask, peerPoolTask, blockchainProcessorTask, blockProducerTask); if (_logger.IsInfo) { _logger.Info("Closing DBs..."); } _dbProvider.Dispose(); while (_disposeStack.Count != 0) { var disposable = _disposeStack.Pop(); if (_logger.IsDebug) { _logger.Debug($"Disposing {disposable.GetType().Name}"); } } if (_logger.IsInfo) { _logger.Info("Ethereum shutdown complete... please wait for all components to close"); } }