private UserActionRunner LaunchUserActionRunner(ScheduledAction action, CancellationToken cancellationToken) { using (ExecutionContext.SuppressFlow()) { var runner = new ScheduledActionRunner(action, log, tracer, diagnostics); var personalCancellationSource = new CancellationTokenSource(); var linkedCancellationSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, personalCancellationSource.Token); var runnerTask = Task.Run(() => runner.RunAsync(linkedCancellationSource.Token)) .ContinueWith( task => { userRunners.TryRemove(action.Name, out _); runner.Dispose(); linkedCancellationSource.Dispose(); personalCancellationSource.Dispose(); }); return(new UserActionRunner(personalCancellationSource, runner, runnerTask)); } }
public ScheduledActionsDynamicRunner( IReadOnlyList <ScheduledAction> staticActions, IVostokApplicationDiagnostics diagnostics, ITracer tracer, ILog log, ScheduledActionsDynamicOptions options) { this.staticActions = staticActions; this.diagnostics = diagnostics; this.tracer = tracer; this.log = log; actualizationRunner = new ScheduledActionRunner(ConfigureActualizationAction(options), log, tracer, diagnostics); userRunners = new ConcurrentDictionary <string, UserActionRunner>(); }
public UserActionRunner(CancellationTokenSource cancellation, ScheduledActionRunner runner, Task runnerTask) { this.cancellation = cancellation; this.runner = runner; this.runnerTask = runnerTask; }