Gå til indholdet

N296 Async (whenall)

I denne opgave skal du hente HTML fra forsiden på https://www.teknologisk.dk, og gemme dette i tre forskellige filer - alt sammen asynkront.

  • Start med at skabe en tom .net konsol applikation
  • Skriv “Start” på konsol
  • Hent ved hjælp af HttpClient’s GetStringAsync metode HTML fra https://www.teknologisk.dk
  • Skriv hvor mange tegn der er hentet
  • Gem nu HTML i tre forskellige filer ved hjælp af System.IO.File.AppendAllTextAsync.
    • Da de tre task ikke er afhængige af hinanden kan du benytte Task.WhenAll til at vente på at alle operationer er gennemført
    • Skriv på konsol når en fil er gemt
  • Skriv “Slut” på konsol
  • Det skal se nogenlunde således ud:
Start
Henter HTML
Henter hentet - 16847 tegn
Gemmer fil1
Gemmer fil2
Gemmer fil3
Slut
Klik for at se et forslag til en løsning
using System;
using System.Net.Http;
using System.Threading.Tasks;

namespace async_gemhtml
{
    class Program
    {
        static async Task Main(string[] args)
        {
            Console.WriteLine("Start");
            using HttpClient c = new HttpClient();
            Console.WriteLine("Henter HTML");
            string html = await c.GetStringAsync("https://www.teknologisk.dk");
            Console.WriteLine($"Henter hentet - {html.Length} tegn");

            Console.WriteLine("Gemmer fil1");
            Task t1 = System.IO.File.AppendAllTextAsync("c:\\temp\\fil1.html", html);
            Console.WriteLine("Gemmer fil2");
            Task t2 = System.IO.File.AppendAllTextAsync("c:\\temp\\fil2.html", html);
            Console.WriteLine("Gemmer fil3");
            Task t3 = System.IO.File.AppendAllTextAsync("c:\\temp\\fil3.html", html);
            await Task.WhenAll(t1, t2, t3);
            Console.WriteLine("Slut");
        }
    }
}