public async void ScheduleTradingEndWorkingEventAsync() { try { //We are after trading! if (EndTradingTimeLocal <= DateTime.Now) { return; } //Raise event 1 minutes before trading end: var ms = (int)Math.Abs(EndTradingTimeLocal.Subtract(DateTime.Now).TotalMilliseconds) - 60000; await Task.Delay(ms, _cancellationTokenSource.Token); Trading60SecondsToEnd?.Invoke(); await Task.Delay(30000, _cancellationTokenSource.Token); Trading30SecondsToEnd?.Invoke(); //Raise event 2 secs before the end time to catch the trading in the middle! await Task.Delay(28000, _cancellationTokenSource.Token); TradingEnd?.Invoke(); } // *** If cancellation is requested, an OperationCanceledException results. catch (OperationCanceledException) { Logger.Notice("ScheduleTradingEndWorkingEventAsync was canceled!!!"); } catch (Exception ex1) { Logger.Error(ex1.Message, ex1); } }
private void AddTimeEventTask(ETradingTimeEventType eventType, int startTimeDelaySec = 0) { var tradingTimeEvent = new TradingTimeEvent(eventType); switch (eventType) { case ETradingTimeEventType.StartTrading: tradingTimeEvent.EventTime = startTimeDelaySec == 0 ? StartTradingTimeLocal : DateTime.Now.AddSeconds(startTimeDelaySec); break; case ETradingTimeEventType.EndTradingIn60Seconds: tradingTimeEvent.EventTime = EndTradingTimeLocal.AddSeconds(-60); break; case ETradingTimeEventType.EndTradingIn30Seconds: tradingTimeEvent.EventTime = EndTradingTimeLocal.AddSeconds(-30); break; case ETradingTimeEventType.EndTrading: tradingTimeEvent.EventTime = EndTradingTimeLocal; break; default: return; } //Verify task time is logical if (DateTime.Now >= tradingTimeEvent.EventTime) { return; } AddTradingTimeEvent(tradingTimeEvent); Logger.InfoFormat("{0}: Event Registration: ***** {1} ", Symbol, tradingTimeEvent); }