public void StreamMarketData(NewDataReceivedEvent newdatahandler) { if (null == newdatahandler) throw new ArgumentNullException(); OnNewDataReceived = newdatahandler; var symbolReaderTask = new Task(SymbolReaderTaskWork); symbolReaderTask.Start(); var symbolProcessorTask = new Task(SymbolProcessorTaskWork); symbolProcessorTask.Start(); symbolReaderTask.Wait(); dataQueue.CompleteAdding(); symbolProcessorTask.Wait(); _cts.Dispose(); _cts = null; }
public void PublishSymbolTicks(NewDataReceivedEvent publisher, CancellationToken token) { if (null == publisher) throw new ArgumentNullException("publisher callback required"); foreach (var data in SymbolTicks.GetConsumingEnumerable()) { if (token.IsCancellationRequested) break; if (Processors.Any()) { foreach (var processor in Processors) if (!processor.ProcessSecurity(data)) break; } if (null != publisher) publisher((SymbolTick)data); } SymbolTicks.CompleteAdding(); }