Пример #1
0
        private static async Task <(ErgonProject project, DiagnosticLog log)> LoadProjectAsync(
            string path, ErgonProjectCollection projectCollection, CancellationToken cancellationToken)
        {
            var log = new DiagnosticLog();

            try
            {
                var loadedProjects = projectCollection.GetLoadedProjects(path);
                if (loadedProjects != null && loadedProjects.Count > 0)
                {
                    Debug.Assert(loadedProjects.Count == 1);

                    return(loadedProjects.First(), log);
                }

                using (var stream = FileUtilities.OpenAsyncRead(path))
                    using (var readStream = await SerializableBytes.CreateReadableStreamAsync(stream, cancellationToken).ConfigureAwait(false))
                        using (var reader = new StreamReader(readStream))
                        {
                            var project = ErgonProject.FromString(await reader.ReadToEndAsync(), path);

                            projectCollection.Add(project);

                            // todo: assign project.path = path
                            return(project, log);
                        }
            }
            catch (Exception e)
            {
                log.Add(e, path);
                return(project : null, log);
            }
        }