예제 #1
0
        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));
            }
        }
예제 #2
0
        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>();
        }
예제 #3
0
 public UserActionRunner(CancellationTokenSource cancellation, ScheduledActionRunner runner, Task runnerTask)
 {
     this.cancellation = cancellation;
     this.runner       = runner;
     this.runnerTask   = runnerTask;
 }