public async Task Build() { BuildContext buildContext = null; try { var dataSource = _pluginManager.Resolve <IDataSource>(_project.DataSource.Name); if (OnStartup != null) { await OnStartup.Invoke(this, new OnProjectBuildStartupEventArgs { Project = _project }); } await dataSource.InitData(); foreach (var buildKV in _project.BuildTasks) { _logger.LogInformation($"-------- BuildTask:{buildKV.Key} Start! ---------"); var output = buildKV.Value.Output; buildContext = new BuildContext { PluginManager = _pluginManager, Project = _project, DataSource = dataSource, BuildKey = buildKV.Key, Build = buildKV.Value, Output = output == null ? null : new Output { Type = output.Type, Path = output.Path, Name = output.Name, Mode = output.Mode, Extension = output.Extension } }; await _pluginManager.Resolve <IBuildTask>(buildKV.Value.Type).Build(buildContext); _logger.LogInformation($"-------- BuildTask:{buildKV.Key} End! ---------"); } if (OnSucceed != null) { await OnSucceed.Invoke(this, new OnProjectBuildSucceedEventArgs { Project = _project }); } } catch (Exception ex) { if (OnFailed != null) { await OnFailed.Invoke(this, new OnProjectBuildFailedEventArgs { Project = _project, Context = buildContext, ErrorException = ex }); } throw; } }
private void CheckProbe(bool IsFinal) { var Index = new QuickIndex(ElementsCount_); if (Elements_.ContainsKey(Index.GetHashCode())) { var Node = Elements_[Index.GetHashCode()]; if (IsFinal) { OnSucceed?.Invoke(Node); } else { OnProbe?.Invoke(Node); } } else { if (IsFinal) { OnFailed?.Invoke(); } else { OnProbe?.Invoke(null); } } }