コード例 #1
0
        /*
         * Use Task.WhenAll to optimize the code to send newsletters
         *
         * Optimize the GenerateNewsletter method by using StringBuilder
         * Refactor the HttpClient in SendMail to automatically dispose itself
         */
        public async Task SendNewsletter(string body)
        {
            var batchSize    = 100;
            var page         = 1;
            var areItemsLeft = true;

            while (areItemsLeft)
            {
                var customers = await _customerReader.GetCustomersAsync(
                    new Shared.Models.PageModel()
                {
                    Page     = page,
                    PageSize = batchSize
                });

                if (customers.PageItems == 0)
                {
                    areItemsLeft = false;
                    break;
                }

                foreach (var customer in customers.Items)
                {
                    var html = _mailGenerator.GenerateNewsletter(body, customer.FirstName);
                    await _mailClient.SendMail(html, customer.Email);
                }

                page++;
            }
        }
コード例 #2
0
        /*
         * Use Task.WhenAll to optimize the code to send newsletters
         *
         * Optimize the GenerateNewsletter method by using StringBuilder
         * Refactor the HttpClient in SendMail to automatically dispose itself
         */
        public async Task SendNewsletter(string body)
        {
            var batchSize    = 100;
            var page         = 1;
            var areItemsLeft = true;

            while (areItemsLeft)
            {
                var customers = await _customerReader.GetCustomersAsync(
                    new Shared.Models.PageModel()
                {
                    Page     = page,
                    PageSize = batchSize
                });

                if (customers.PageItems == 0)
                {
                    areItemsLeft = false;
                    break;
                }

                //foreach (var customer in customers.Items)
                //{
                //    var html = _mailGenerator.GenerateNewsletter(body, customer.FirstName);
                //    await _mailClient.SendMail(html, customer.Email);
                //}

                var tasks = new List <Task>(customers.PageItems);
                foreach (var customer in customers.Items)
                {
                    var html = _mailGenerator.GenerateNewsletter(body, customer.FirstName);
                    tasks.Add(_mailClient.SendMail(html, customer.Email));
                }

                await Task.WhenAll(tasks);

                page++;
            }
        }