Асинхронный парсинг страниц и запись в файл - 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); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д