/// <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"); }