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

View File

@ -253,7 +253,7 @@ namespace CryptoExchange.Net.Sockets
var reconnectSuccessful = await ProcessReconnectAsync().ConfigureAwait(false);
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);
}
else