Как отловить ошибку вызванную в System.dll и mscorlib.dll
Столкнулся с интересной ситуацией. Есть wss, где я в while постоянно читаю данные. Все работает, данные принимаются, однако после рандомного количества времени (минимум сколько проработало было 3 часа, а максимум 155 часов), вылетают следующие ошибки:
Вызвано исключение: "System.Net.WebSockets.WebSocketException" в System.dll
Вызвано исключение: "System.Net.WebSockets.WebSocketException" в mscorlib.dll
Вызвано исключение: "System.ObjectDisposedException" в System.dll
Вызвано исключение: "System.ObjectDisposedException" в System.dll
Вызвано исключение: "System.Net.WebSockets.WebSocketException" в System.dll
Вызвано исключение: "System.Net.WebSockets.WebSocketException" в mscorlib.dll
Вызвано исключение: "System.Net.WebSockets.WebSocketException" в mscorlib.dll
Пробовал отловить их через try catch, думал что они рождаются тут
rcvResult = await client.ReceiveAsync(rcvBuffer, token);
однако ошибки там не отлавливаются.
Может кто-нибудь сталкивался с данными ошибками, ну и соответственно знает что делать или куда копать в данном случае?
private static async Task GetData()
{
System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
CancellationTokenSource cancelTokenSource = new CancellationTokenSource();
CancellationToken token = cancelTokenSource.Token;
ClientWebSocket client_ws = new ClientWebSocket();
await client_ws.ConnectAsync(new Uri(webSocketUri_market), token);
//подписываюсь на событие
await client_ws.SendAsync(new ArraySegment<byte>(Encoding.UTF8.GetBytes("{\"id\": " + r + ",\"method\":\"subscribe\",\"params\":{\"channels\": [\"book.ETC_USDT.10\"]},\"nonce\":" + GetTimestamp() + "}")), WebSocketMessageType.Text, true, token);
try
{
await Receiving(client_ws, token);
}
catch(WebException e)
{
Debug.WriteLine("Ошибка! Receiving! " + e.Message);
}
}
private static async Task Receiving(ClientWebSocket client, CancellationToken token)
{
var rcvBytes = new byte[8192];
var rcvBuffer = new ArraySegment<byte>(rcvBytes);
string rcvMsg = "";
WebSocketReceiveResult rcvResult;
while (client.State.ToString() == "Open")
{
rcvResult = await client.ReceiveAsync(rcvBuffer, token);
byte[] msgBytes = rcvBuffer.Skip(rcvBuffer.Offset).Take(rcvResult.Count).ToArray();
rcvMsg = Encoding.UTF8.GetString(msgBytes);
{ряд действий с полученными данными}
}
}