static async Task StartAsync(INetworkController controller, CancellationToken cancellationToken) { var delay = Settings.Current.StartAfter; INetworkStatusReporter reporter = new NetworkStatusReporter(Settings.Current.TestResultCoordinatorEndpoint, Settings.Current.ModuleId, Settings.Current.TrackingId); foreach (Frequency item in Settings.Current.Frequencies) { Log.LogInformation($"Schedule task for type {controller.NetworkControllerType} to start after {delay} Offline frequency {item.OfflineFrequency} Online frequency {item.OnlineFrequency} Run times {item.RunsCount}"); var taskExecutor = new CountedTaskExecutor( async cs => { await SetNetworkControllerStatus(controller, NetworkControllerStatus.Enabled, reporter, cs); await Task.Delay(item.OfflineFrequency, cs); await SetNetworkControllerStatus(controller, NetworkControllerStatus.Disabled, reporter, cs); }, delay, item.OnlineFrequency, item.RunsCount, Log, "restrict/default"); await taskExecutor.Schedule(cancellationToken); // Only needs to set the start delay for first frequency, after that reset to 0 delay = TimeSpan.FromSeconds(0); } }
static async Task StartAsync(INetworkController controller, CancellationToken cancellationToken) { INetworkStatusReporter reporter = new NetworkStatusReporter(Settings.Current.TestResultCoordinatorEndpoint, Settings.Current.ModuleId, Settings.Current.TrackingId); foreach (Frequency item in Settings.Current.Frequencies) { Log.LogInformation($"Schedule task for type {controller.NetworkControllerType} with enable network control frequency {item.OfflineFrequency}, disable network control frequency {item.OnlineFrequency}, and run times {item.RunsCount}."); var taskExecutor = new CountedTaskExecutor( async cs => { await SetNetworkControllerStatus(controller, NetworkControllerStatus.Enabled, reporter, cs); await Task.Delay(item.OfflineFrequency, cs); await SetNetworkControllerStatus(controller, NetworkControllerStatus.Disabled, reporter, cs); }, TimeSpan.Zero, item.OnlineFrequency, item.RunsCount, Log, "restrict/default"); await taskExecutor.Schedule(cancellationToken); } }