/// <inheritdoc /> protected override async Task <CallResult <UpdateSubscription> > DoStart() { CallResult <UpdateSubscription> subResult; if (limit == null) { subResult = await socketClient.SubscribeToOrderBookUpdatesAsync(Symbol, updateInterval, HandleUpdate).ConfigureAwait(false); } else { subResult = await socketClient.SubscribeToPartialOrderBookUpdatesAsync(Symbol, limit.Value, updateInterval, HandleUpdate).ConfigureAwait(false); } if (!subResult) { return(new CallResult <UpdateSubscription>(null, subResult.Error)); } Status = OrderBookStatus.Syncing; if (limit == null) { var bookResult = await restClient.GetOrderBookAsync(Symbol, limit ?? 5000).ConfigureAwait(false); if (!bookResult) { await socketClient.UnsubscribeAll().ConfigureAwait(false); return(new CallResult <UpdateSubscription>(null, bookResult.Error)); } SetInitialOrderBook(bookResult.Data.LastUpdateId, bookResult.Data.Bids, bookResult.Data.Asks); } else { var setResult = await WaitForSetOrderBook(10000).ConfigureAwait(false); return(setResult ? subResult : new CallResult <UpdateSubscription>(null, setResult.Error)); } return(new CallResult <UpdateSubscription>(subResult.Data, null)); }