Пример #1
0
        /// <inheritdoc />
        public override ExecutionResult Run(string input, IChannel channel)
        {
            var inputParameters = ParseInputParameters(input, firstParameterInferredName: ParameterNamePackageName);
            var name            = inputParameters.DecodeParameter <string>(ParameterNamePackageName);
            var status          = new Jupyter.TaskStatus($"Adding package {name}");
            var statusUpdater   = channel.DisplayUpdatable(status);

            void Update() => statusUpdater.Update(status);

            var task = RunAsync(name, channel, (newStatus) =>
            {
                status.Subtask = newStatus;
                Update();
            });

            using (Observable
                   .Interval(TimeSpan.FromSeconds(1))
                   .TakeUntil((idx) => task.IsCompleted)
                   .Do(idx => Update())
                   .Subscribe())
            {
                task.Wait();
            }
            status.Subtask     = "done";
            status.IsCompleted = true;
            Update();
            return(task.Result);
        }
Пример #2
0
        internal static void Reload(IWorkspace workspace, IChannel channel)
        {
            var status        = new Jupyter.TaskStatus($"Reloading workspace");
            var statusUpdater = channel.DisplayUpdatable(status);

            void Update() => statusUpdater.Update(status);

            var task = Task.Run(() =>
            {
                workspace.Reload((newStatus) =>
                {
                    status.Subtask = newStatus;
                    Update();
                });
            });

            try
            {
                using (Observable
                       .Interval(TimeSpan.FromSeconds(1))
                       .TakeUntil((idx) => task.IsCompleted)
                       .Do(idx => Update())
                       .Subscribe())
                {
                    task.Wait();
                }

                status.Subtask     = "done";
                status.IsCompleted = true;
                Update();
            }
            catch (Exception)
            {
                status.Subtask     = "error";
                status.IsCompleted = true;
                Update();
                throw;
            }
        }