protected async Task OptimizeClick() { await Wait.Show(); _stopWatch.Reset(); _stopWatch.Start(); IterationResult result = null; try { //Console.WriteLine(MinimizeFunctionCode.Code); OptimizerBase optimizer = null; if (MinimizeFunctionCode.Language == "javascript") { optimizer = (JavascriptOptimizer)ServiceProvider.GetService(typeof(JavascriptOptimizer)); } else if (MinimizeFunctionCode.Language == "csharp") { optimizer = (CSharpThreadedOptimizer)ServiceProvider.GetService(typeof(CSharpThreadedOptimizer)); } if (_config == null) { ToastService.ShowError("No config was uploaded or created."); await Wait.Hide(); return; } else { var fitness = string.IsNullOrEmpty(_config.Fitness?.OptimizerTypeName) ? _config.FitnessTypeName : _config.Fitness.OptimizerTypeName; ActivityLogger.ResetLog(); ActivityLogger.Add("Starting " + fitness); optimizer.Initialize(MinimizeFunctionCode.Code, ActivityLogger); TokenSource = new CancellationTokenSource(); var task = Task.Run(() => optimizer.Start(_config, TokenSource.Token), TokenSource.Token); try { result = await task; } catch (TaskCanceledException) { CodeEditorBase.TokenSource = null; await Wait.Hide(); ToastService.ShowInfo("Optimization was cancelled."); TokenSource = null; return; } TokenSource = null; // Console.WriteLine(ActivityLogger.Log); await JSRuntime.InvokeVoidAsync("ClientStorage.storeChartData", ActivityLogger.Log); //todo: backticks //dynamic context = new EvalContext(JSRuntime); //(context as EvalContext).Expression = () => context.ClientStorage.storeChartData(ActivityLogger.Log); //await (context as EvalContext).InvokeAsync<dynamic>(); ToastService.ShowSuccess("Chart data was saved."); } } catch (Exception ex) { await Wait.Hide(); ToastService.ShowError(ex.Message); throw ex; } finally { await Wait.Hide(); } _stopWatch.Stop(); ToastService.ShowSuccess("Best Cost: " + result.Cost.ToString("N")); ToastService.ShowSuccess("Best Parameters: " + string.Join(",", result.ParameterSet.Select(s => s.ToString("N")))); ActivityLogger.Add("Best Cost: ", result.Cost); ActivityLogger.Add("Best Parameters: ", result.ParameterSet); ActivityLogger.Add("Total Time (s): ", _stopWatch.ElapsedMilliseconds / 1000); }