public async Task DoWork(IBaseSocketExchange baseExchange, CancellationToken token) { var pairs = dbService.GetArbitragePairs("market", baseExchange.Name, counterExchange.Name).Select(p => new ArbitragePair(p)); SocketTradeHandler handler = ProcessTrade; foreach (var pair in pairs) { baseExchange.RegisterPair(pair, handler); } baseExchange.SubscribeTrades(token); Parallel.ForEach(pairs, pair => { try { ProcessOrderBook(baseExchange, pair, token).Wait(); } catch (Exception ex) { logger.Error(ex); } }); await Task.FromResult(0); }
public void RegisterPair(ArbitragePair pair, SocketTradeHandler handler) { if (!_pairs.TryAdd(pair.Symbol, pair)) { throw new Exception("Duplicate pair"); } if (!_handlers.TryAdd(pair.Symbol, handler)) { throw new Exception("Duplicate handler"); } }