Пример #1
0
        /// <summary>Advisor main loop</summary>
        private async Task AdvisorMain(CancellationToken thread_stop)
        {
            Log.Write(ELogLevel.Info, "Advisor Activated");

            // One-time update the data we don't expect to change
            await Src.BuildCache(RebuildStaticData);

            RebuildStaticData = false;

            // Start a loop
            var issue = 0;

            for (; !thread_stop.IsCancellationRequested;)
            {
                // If a new search is needed and not yet started, search now
                if (m_trade_routes_issue_current != m_trade_routes_issue && issue != m_trade_routes_issue)
                {
                    // Find trade routes
                    issue = m_trade_routes_issue;
                    await FindTradeRoutes(m_settings_snapshot, issue);

                    continue;
                }

                // If up to date, go to sleep
                using (thread_stop.Register(() => m_find_trade_routes.Set()))
                    m_find_trade_routes.WaitOne(TimeSpan.FromSeconds(0.5));
            }

            Log.Write(ELogLevel.Info, "Advisor Deactivated");
        }