From 5b97f6dd67b44652f69ace9d7bcc0e7de2da8902 Mon Sep 17 00:00:00 2001 From: Nathan Pfluger Date: Thu, 12 May 2022 10:00:44 -0700 Subject: [PATCH] Move Subscription Events into non-lambda so they can be removed on StopAsync --- .../OrderBook/SymbolOrderBook.cs | 44 ++++++++++++------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/CryptoExchange.Net/OrderBook/SymbolOrderBook.cs b/CryptoExchange.Net/OrderBook/SymbolOrderBook.cs index cb2ee68..0c9dda7 100644 --- a/CryptoExchange.Net/OrderBook/SymbolOrderBook.cs +++ b/CryptoExchange.Net/OrderBook/SymbolOrderBook.cs @@ -258,26 +258,32 @@ namespace CryptoExchange.Net.OrderBook } _subscription = startResult.Data; - _subscription.ConnectionLost += () => - { - log.Write(LogLevel.Warning, $"{Id} order book {Symbol} connection lost"); - if (Status != OrderBookStatus.Disposed) { - Status = OrderBookStatus.Reconnecting; - Reset(); - } - }; - _subscription.ConnectionClosed += () => - { - log.Write(LogLevel.Warning, $"{Id} order book {Symbol} disconnected"); - Status = OrderBookStatus.Disconnected; - _ = StopAsync(); - }; + _subscription.ConnectionLost += HandleConnectionLost; + _subscription.ConnectionClosed += HandleConnectionClosed; + _subscription.ConnectionRestored += HandleConnectionRestored; - _subscription.ConnectionRestored += async time => await ResyncAsync().ConfigureAwait(false); Status = OrderBookStatus.Synced; return new CallResult(true); } + private void HandleConnectionLost() { + log.Write(LogLevel.Warning, $"{Id} order book {Symbol} connection lost"); + if (Status != OrderBookStatus.Disposed) { + Status = OrderBookStatus.Reconnecting; + Reset(); + } + } + + private void HandleConnectionClosed() { + log.Write(LogLevel.Warning, $"{Id} order book {Symbol} disconnected"); + Status = OrderBookStatus.Disconnected; + _ = StopAsync(); + } + + private async void HandleConnectionRestored(TimeSpan _) { + await ResyncAsync().ConfigureAwait(false); + } + /// public async Task StopAsync() { @@ -288,8 +294,12 @@ namespace CryptoExchange.Net.OrderBook if (_processTask != null) await _processTask.ConfigureAwait(false); - if (_subscription != null) + if (_subscription != null) { await _subscription.CloseAsync().ConfigureAwait(false); + _subscription.ConnectionLost -= HandleConnectionLost; + _subscription.ConnectionClosed -= HandleConnectionClosed; + _subscription.ConnectionRestored -= HandleConnectionRestored; + } log.Write(LogLevel.Trace, $"{Id} order book {Symbol} stopped"); } @@ -609,7 +619,7 @@ namespace CryptoExchange.Net.OrderBook while (_processQueue.TryDequeue(out var item)) { - if (Status == OrderBookStatus.Disconnected || Status == OrderBookStatus.Disposed) + if (Status == OrderBookStatus.Disconnected || Status == OrderBookStatus.Disposed) break; if (_stopProcessing)