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. " +