diff --git a/CryptoExchange.Net/CryptoExchange.Net.csproj b/CryptoExchange.Net/CryptoExchange.Net.csproj
index 24acd50..14241fa 100644
--- a/CryptoExchange.Net/CryptoExchange.Net.csproj
+++ b/CryptoExchange.Net/CryptoExchange.Net.csproj
@@ -16,7 +16,7 @@
-
+
diff --git a/CryptoExchange.Net/SocketClient.cs b/CryptoExchange.Net/SocketClient.cs
index 6dca89c..8fa26a8 100644
--- a/CryptoExchange.Net/SocketClient.cs
+++ b/CryptoExchange.Net/SocketClient.cs
@@ -67,6 +67,9 @@ namespace CryptoExchange.Net
socket.DataInterpreter = dataInterpreter;
socket.OnClose += () =>
{
+ foreach (var sub in sockets)
+ sub.ResetEvents();
+
SocketOnClose(socket);
};
socket.OnError += (e) =>
diff --git a/CryptoExchange.Net/Sockets/SocketSubscription.cs b/CryptoExchange.Net/Sockets/SocketSubscription.cs
index b687acf..e19a0ba 100644
--- a/CryptoExchange.Net/Sockets/SocketSubscription.cs
+++ b/CryptoExchange.Net/Sockets/SocketSubscription.cs
@@ -65,7 +65,12 @@ namespace CryptoExchange.Net.Sockets
public void SetEvent(string name, bool success, Error error)
{
- Events.SingleOrDefault(e => e.Name == name)?.Set(success, error);
+ var waitingEvent = waitingForEvents.SingleOrDefault(e => e.Name == name);
+ if (waitingEvent != null)
+ {
+ waitingEvent.Set(success, error);
+ waitingForEvents.Remove(waitingEvent);
+ }
}
public void SetEvent(int id, bool success, Error error)
@@ -85,23 +90,24 @@ namespace CryptoExchange.Net.Sockets
public Task> WaitForEvent(string name, int timeout)
{
- return Task.Run(() =>
- {
- var evnt = Events.Single(e => e.Name == name);
- waitingForEvents.Add(evnt);
- return evnt.Wait(timeout);
- });
+ var evnt = Events.Single(e => e.Name == name);
+ waitingForEvents.Add(evnt);
+ return Task.Run(() => evnt.Wait(timeout));
}
public Task> WaitForEvent(string name, int id, int timeout)
{
- return Task.Run(() =>
- {
- var evnt = Events.Single(e => e.Name == name);
- evnt.WaitingId = id;
- waitingForEvents.Add(evnt);
- return evnt.Wait(timeout);
- });
+ var evnt = Events.Single(e => e.Name == name);
+ evnt.WaitingId = id;
+ waitingForEvents.Add(evnt);
+ return Task.Run(() => evnt.Wait(timeout));
+ }
+
+ public void ResetEvents()
+ {
+ foreach (var waiting in new List(waitingForEvents))
+ waiting.Set(false, new UnknownError("Connection reset"));
+ waitingForEvents.Clear();
}
public async Task Close()