public async Task RunWithoutChannelsButConcurrentAsync() { var stopwatch = new Stopwatch(); stopwatch.Start(); // Get all posts var generator = new ThumbnailGenerator(); var tasks = new List <Task>(); var postPaths = Directory.GetFiles(Constants.PostsDirectory); foreach (var postPath in postPaths) { tasks.Add(new Func <Task>(async() => { var frontMatter = await generator.ReadFrontMatterAsync(postPath); if (frontMatter == null) { return; } var cardImage = await generator.CreateImageAsync(frontMatter); await generator.SaveImageAsync(cardImage, Path.GetFileNameWithoutExtension(postPath) + ".png"); }).Invoke()); } await Task.WhenAll(tasks); stopwatch.Stop(); _outputHelper.WriteLine("Completed in {0}", stopwatch.Elapsed); }
public async Task RunWithoutChannelsAsync() { var stopwatch = new Stopwatch(); stopwatch.Start(); // Get all posts var generator = new ThumbnailGenerator(); var postPaths = Directory.GetFiles(Constants.PostsDirectory); foreach (var postPath in postPaths) { var frontMatter = await generator.ReadFrontMatterAsync(postPath); if (frontMatter == null) { continue; } var cardImage = await generator.CreateImageAsync(frontMatter); await generator.SaveImageAsync(cardImage, Path.GetFileName(postPath) + ".png"); } stopwatch.Stop(); _outputHelper.WriteLine("Completed in {0}", stopwatch.Elapsed); }
public async Task RunWithChannelsAsync() { var stopwatch = new Stopwatch(); stopwatch.Start(); var generator = new ThumbnailGenerator(); await Channel .CreateBounded <string>(50000) .Source(Directory.GetFiles(Constants.PostsDirectory)) .PipeAsync( maxConcurrency: 2, capacity: 100, transform: async postPath => { var frontMatter = await generator.ReadFrontMatterAsync(postPath); return(postPath, frontMatter); }) .Filter(tuple => tuple.Item2 != null) .PipeAsync( maxConcurrency: 10, capacity: 20, transform: async tuple => { var(postPath, frontMatter) = tuple; var cardImage = await generator.CreateImageAsync(frontMatter !); return(postPath, frontMatter, cardImage); }) .ReadAllAsync(async tuple => { var(postPath, _, cardImage) = tuple; await generator.SaveImageAsync(cardImage, Path.GetFileName(postPath) + ".png"); }); stopwatch.Stop(); _outputHelper.WriteLine("Completed in {0}", stopwatch.Elapsed); }