Асинхронный парсинг страниц и запись в файл - 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);
}
}