Асинхронный парсинг страниц и запись в файл - C#

Узнай цену своей работы

Формулировка задачи:

Задача: асинхронно парсить страницы сайта site.ru, вида site.ru/page/1-n, и записывать их содержимое в файл. Не могу разобраться с async/await
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Net;
  7. using System.IO;
  8. namespace ConsoleApplication2
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. for (int i = 0; i <= 99; i++)
  15. {
  16.  
  17. Task.Run(async () =>
  18. {
  19. var httpWebRequest = (HttpWebRequest)WebRequest.Create(String.Format(@"http://site.ru/page/{0}", i.ToString()));
  20. //httpWebRequest.PreAuthenticate = true;
  21. httpWebRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
  22. using (var httpWebResponse = (HttpWebResponse)await httpWebRequest.GetResponseAsync())
  23. using (var responseStream = httpWebResponse.GetResponseStream())
  24. using (var streamReader = new StreamReader(responseStream))
  25. {
  26. var stringContent = await streamReader.ReadToEndAsync();
  27.  
  28. await WriteTextAsync("aaa.txt", stringContent);
  29.  
  30. }
  31. });
  32. }
  33. }
  34. public async Task WriteTextAsync(string filePath, string text)
  35. {
  36. byte[] encodedText = Encoding.Unicode.GetBytes(text);
  37. using (FileStream sourceStream = new FileStream(filePath,
  38. FileMode.Append, FileAccess.Write, FileShare.None,
  39. bufferSize: 4096, useAsync: true))
  40. {
  41. await sourceStream.WriteAsync(encodedText, 0, encodedText.Length);
  42. };
  43. }
  44.  
  45. }
  46. }

Решение задачи: «Асинхронный парсинг страниц и запись в файл»

textual
Листинг программы
  1. using System.IO;
  2. using System.Linq;
  3. using System.Net.Http;
  4. using System.Threading.Tasks;
  5.  
  6. class Class1
  7. {
  8.     static void Main()
  9.     {
  10.         MainAsync().Wait();
  11.     }
  12.  
  13.     static async Task MainAsync()
  14.     {
  15.         const string add = "https://api.vk.com/method/likes.getList?type=post&owner_id=135215546&item_id=4377&filter=likes&frinds_only=0&extended=1&offset=1&count=1000&access_token=aa5d63a10ecf232dd20ae58f807722d5e5a8d553e88fb7a833c8622bfe558ef472191341e75ddbfb8d182&item_id=";
  16.  
  17.         string[] m = { "4377", "4247", "4390", "4241", "4275", "4274", "4392" };
  18.         var task = m.Select(async url =>
  19.         {
  20.             using (var clien = new HttpClient())
  21.             {
  22.                 return await clien.GetStringAsync(add + url);
  23.             }
  24.  
  25.         }).ToList();
  26.  
  27.         var results = await Task.WhenAll(task);
  28.  
  29.         File.WriteAllLines("result.txt",results);
  30.     }
  31. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут