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

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

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

Задача: асинхронно парсить страницы сайта site.ru, вида site.ru/page/1-n, и записывать их содержимое в файл. Не могу разобраться с async/await
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
 
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
       
            for (int i = 0; i <= 99; i++)
            {

                Task.Run(async () =>
                {
                    var httpWebRequest = (HttpWebRequest)WebRequest.Create(String.Format(@"http://site.ru/page/{0}", i.ToString()));
                    //httpWebRequest.PreAuthenticate = true;
                    httpWebRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
 
                    using (var httpWebResponse = (HttpWebResponse)await httpWebRequest.GetResponseAsync())
                    using (var responseStream = httpWebResponse.GetResponseStream())
                    using (var streamReader = new StreamReader(responseStream))
                    {
                        var stringContent = await streamReader.ReadToEndAsync();

                        await WriteTextAsync("aaa.txt", stringContent);

                    }
                });
 
            }
                  
        }
 
        public async Task WriteTextAsync(string filePath, string text)
        {
            byte[] encodedText = Encoding.Unicode.GetBytes(text);
 
            using (FileStream sourceStream = new FileStream(filePath,
                FileMode.Append, FileAccess.Write, FileShare.None,
                bufferSize: 4096, useAsync: true))
            {
                await sourceStream.WriteAsync(encodedText, 0, encodedText.Length);
            };
        }

    }
}

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

textual
Листинг программы
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
 
class Class1
{
    static void Main()
    {
        MainAsync().Wait();
    }
 
    static async Task MainAsync()
    {
        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=";
 
        string[] m = { "4377", "4247", "4390", "4241", "4275", "4274", "4392" };
        var task = m.Select(async url =>
        {
            using (var clien = new HttpClient())
            {
                return await clien.GetStringAsync(add + url);
            }
 
        }).ToList();
 
        var results = await Task.WhenAll(task);
 
        File.WriteAllLines("result.txt",results);
    }
}

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


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

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

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