예제 #1
0
        public static string RenderRow(FileMergeSortModel.ChunkedFile chunkedFile)
        {
            var fileNameEntry      = string.Join("", chunkedFile.ChunkName.PadRight(ChunkNameLength).Take(ChunkNameLength));
            var numberOfLinesEntry = string.Join("", chunkedFile.FromTo.PadRight(FromToLength).Take(FromToLength - 3));

            var stateEntry = chunkedFile.IsDone ? "Done".InGreen() : "Writing".InYellow();

            return($"{fileNameEntry} {numberOfLinesEntry} {stateEntry}");
        }
예제 #2
0
        public static async Task Main(string[] args)
        {
            Singletones.Metrics.Stopwatch.Start();
            Console.OutputEncoding = System.Text.Encoding.UTF8;

            await Task.WhenAll(
                Directory.EnumerateFiles(Constants.DefaultInputFileBasePath)
                .Select(
                    fileName => Singletones.Sorter.Chunk(fileName, Singletones.CancellationTokenSource.Token)
                    ).SelectMany(f =>
            {
                return(f.Select(t =>
                {
                    var item = new FileMergeSortModel.ChunkedFile
                    {
                        ChunkName = t.ChunkFileName,
                        FromTo = t.FromTo,
                        IsDone = false
                    };
                    t.Task.ContinueWith(_ =>
                    {
                        item.IsDone = true;
                        Singletones.UI.UpdateElapsed();
                    }, TaskScheduler.Current);
                    Singletones.UI.Model.ChunkedFiles.Add(item);
                    return t.Task;
                }));
            })
                );

            await Singletones.Sorter.SortChunks(Singletones.CancellationTokenSource.Token);

            Singletones.UI.Model.IsDone = true;

            Singletones.Metrics.Stopwatch.Stop();
            Singletones.UI.UpdateElapsed();
            Singletones.UI.RenderingLoop.Block();
        }