/// <inheritdoc />
        public async Task <CallResult <UpdateSubscription> > SubscribeToTickerUpdatesAsync(string symbol, Action <DataEvent <CoinExSocketSymbolState> > onMessage, CancellationToken ct = default)
        {
            symbol.ValidateCoinExSymbol();
            var internalHandler = new Action <DataEvent <JToken[]> >(data =>
            {
                var desResult = _baseClient.DeserializeInternal <Dictionary <string, CoinExSocketSymbolState> >(data.Data[0]);
                if (!desResult)
                {
                    _log.Write(LogLevel.Warning, "Received invalid state update: " + desResult.Error);
                    return;
                }
                var result    = desResult.Data.First().Value;
                result.Symbol = symbol;

                onMessage(data.As(result, symbol));
            });

            return(await _baseClient.SubscribeInternalAsync(this, new CoinExSocketRequest(_baseClient.NextIdInternal(), StateSubject, SubscribeAction, symbol), null, false, internalHandler, ct).ConfigureAwait(false));
        }