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