1
0
mirror of https://github.com/JKorf/CryptoExchange.Net synced 2025-06-07 16:06:15 +00:00

Test some changes for robustness

This commit is contained in:
JKorf 2023-02-18 10:41:26 +01:00
parent 0005534a95
commit 1c33e297e7
2 changed files with 59 additions and 11 deletions

View File

@ -211,8 +211,16 @@ namespace CryptoExchange.Net.Sockets
while (_closeTask == null) while (_closeTask == null)
await Task.Delay(50).ConfigureAwait(false); await Task.Delay(50).ConfigureAwait(false);
await _closeTask.ConfigureAwait(false); await _closeSem.WaitAsync().ConfigureAwait(false);
_closeTask = null; try
{
await _closeTask.ConfigureAwait(false);
_closeTask = null;
}
finally
{
_closeSem.Release();
}
if (!Parameters.AutoReconnect) if (!Parameters.AutoReconnect)
{ {
@ -285,8 +293,19 @@ namespace CryptoExchange.Net.Sockets
return; return;
_log.Write(LogLevel.Debug, $"Socket {Id} reconnect requested"); _log.Write(LogLevel.Debug, $"Socket {Id} reconnect requested");
_closeTask = CloseInternalAsync(); await _closeSem.WaitAsync().ConfigureAwait(false);
await _closeTask.ConfigureAwait(false); try
{
if (_processState != ProcessState.Processing)
return;
_closeTask = CloseInternalAsync();
await _closeTask.ConfigureAwait(false);
}
finally
{
_closeSem.Release();
}
} }
/// <inheritdoc /> /// <inheritdoc />
@ -430,8 +449,19 @@ namespace CryptoExchange.Net.Sockets
{ {
// Connection closed unexpectedly, .NET framework // Connection closed unexpectedly, .NET framework
OnError?.Invoke(ioe); OnError?.Invoke(ioe);
if (_closeTask?.IsCompleted != false) await _closeSem.WaitAsync().ConfigureAwait(false);
_closeTask = CloseInternalAsync(); try
{
if (_processState != ProcessState.Processing)
return;
if (_closeTask?.IsCompleted != false)
_closeTask = CloseInternalAsync();
}
catch
{
_closeSem.Release();
}
break; break;
} }
} }
@ -488,8 +518,17 @@ namespace CryptoExchange.Net.Sockets
{ {
// Connection closed unexpectedly // Connection closed unexpectedly
OnError?.Invoke(wse); OnError?.Invoke(wse);
if (_closeTask?.IsCompleted != false) await _closeSem.WaitAsync().ConfigureAwait(false);
_closeTask = CloseInternalAsync(); try
{
if (_processState == ProcessState.Processing && _closeTask?.IsCompleted != false)
_closeTask = CloseInternalAsync();
}
catch
{
_closeSem.Release();
}
break; break;
} }
@ -497,8 +536,17 @@ namespace CryptoExchange.Net.Sockets
{ {
// Connection closed unexpectedly // Connection closed unexpectedly
_log.Write(LogLevel.Debug, $"Socket {Id} received `Close` message"); _log.Write(LogLevel.Debug, $"Socket {Id} received `Close` message");
if (_closeTask?.IsCompleted != false) await _closeSem.WaitAsync().ConfigureAwait(false);
_closeTask = CloseInternalAsync(); try
{
if (_processState == ProcessState.Processing && _closeTask?.IsCompleted != false)
_closeTask = CloseInternalAsync();
}
catch
{
_closeSem.Release();
}
break; break;
} }

View File

@ -253,7 +253,7 @@ namespace CryptoExchange.Net.Sockets
var reconnectSuccessful = await ProcessReconnectAsync().ConfigureAwait(false); var reconnectSuccessful = await ProcessReconnectAsync().ConfigureAwait(false);
if (!reconnectSuccessful) if (!reconnectSuccessful)
{ {
_log.Write(LogLevel.Warning, "Failed reconnect processing, reconnecting again"); _log.Write(LogLevel.Warning, $"Failed reconnect processing: {reconnectSuccessful.Error}, reconnecting again");
await _socket.ReconnectAsync().ConfigureAwait(false); await _socket.ReconnectAsync().ConfigureAwait(false);
} }
else else