コード例 #1
0
ファイル: Program.cs プロジェクト: JerryBian/dff
        private static async Task Main(string[] args)
        {
            _logger = new Logger();
            _logger.RegisterProvider(new ConsoleLogProvider());
            _logger.RegisterProvider(new FileLogProvider());

            AppDomain.CurrentDomain.ProcessExit += OnExit;
            Console.CancelKeyPress += OnExit;
            TaskScheduler.UnobservedTaskException += OnExit;

            var fileManager    = new FileManager(_logger);
            var analysisEngine = new AnalysisEngine(_logger, fileManager);

            try
            {
                Parser.Default.ParseArguments <ArgOptions>(args)
                .WithParsed(async arg =>
                {
                    try
                    {
                        var inputFolder = arg.InputFolder;
                        if (string.IsNullOrEmpty(inputFolder) || string.IsNullOrWhiteSpace(inputFolder))
                        {
                            inputFolder = Environment.CurrentDirectory;
                        }

                        if (!Directory.Exists(inputFolder))
                        {
                            await _logger.ErrorAsync($"Can't find valid directory at \"{inputFolder}\".", null);
                            return;
                        }

                        arg.InputFolder = inputFolder;
                        await _logger.InfoAsync("Start processing ...");
                        var stopwatch = Stopwatch.StartNew();
                        await analysisEngine.ExecuteAsync(arg);
                        stopwatch.Stop();
                        await _logger.InfoAsync($"Process completed. It took {stopwatch.ElapsedMilliseconds}ms.");
                    }
                    catch (Exception ex)
                    {
                        await _logger.ErrorAsync("Unexpected interruption.", ex);
                    }
                })
                .WithNotParsed(async e =>
                {
                    foreach (var error in e)
                    {
                        await _logger.ErrorAsync($"Argument error: {error}", null);
                    }
                });
            }
            catch (Exception ex)
            {
                await _logger.ErrorAsync("Unexpected exception.", ex);
            }
            finally
            {
                await _logger.FlushAsync();
            }
        }