diff --git a/CryptoExchange.Net/CryptoExchange.Net.xml b/CryptoExchange.Net/CryptoExchange.Net.xml index cdc0cd0..edc332b 100644 --- a/CryptoExchange.Net/CryptoExchange.Net.xml +++ b/CryptoExchange.Net/CryptoExchange.Net.xml @@ -1030,6 +1030,13 @@ + + + Wait one async + + + + Wait one async diff --git a/CryptoExchange.Net/Sockets/SocketConnection.cs b/CryptoExchange.Net/Sockets/SocketConnection.cs index 02ec83c..530c4cc 100644 --- a/CryptoExchange.Net/Sockets/SocketConnection.cs +++ b/CryptoExchange.Net/Sockets/SocketConnection.cs @@ -224,31 +224,32 @@ namespace CryptoExchange.Net.Sockets var sw = Stopwatch.StartNew(); // Loop the subscriptions to check if any of them signal us that the message is for them + List subscriptionsCopy; lock (subscriptionLock) + subscriptionsCopy = subscriptions.ToList(); + + foreach (var subscription in subscriptionsCopy) { - foreach (var subscription in subscriptions.ToList()) + currentSubscription = subscription; + if (subscription.Request == null) { - currentSubscription = subscription; - if (subscription.Request == null) + if (socketClient.MessageMatchesHandler(messageEvent.JsonData, subscription.Identifier!)) { - if (socketClient.MessageMatchesHandler(messageEvent.JsonData, subscription.Identifier!)) - { - handled = true; - subscription.MessageHandler(messageEvent); - } + handled = true; + subscription.MessageHandler(messageEvent); } - else + } + else + { + if (socketClient.MessageMatchesHandler(messageEvent.JsonData, subscription.Request)) { - if (socketClient.MessageMatchesHandler(messageEvent.JsonData, subscription.Request)) - { - handled = true; - messageEvent.JsonData = socketClient.ProcessTokenData(messageEvent.JsonData); - subscription.MessageHandler(messageEvent); - } + handled = true; + messageEvent.JsonData = socketClient.ProcessTokenData(messageEvent.JsonData); + subscription.MessageHandler(messageEvent); } } } - + sw.Stop(); if (sw.ElapsedMilliseconds > 500) log.Write(LogLevel.Warning, $"Socket {Socket.Id} message processing slow ({sw.ElapsedMilliseconds}ms), consider offloading data handling to another thread. " +