Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }