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}"); }
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(); }