Gå til indholdet

N297 Async (egen metode)

Du skal skabe en async konsol app og dan en tekstfil i c:\temp\ med noget tekst i. Brug evt. denne metode:

public static void DanFil(string fil)
{
    if (System.IO.File.Exists(fil))
        System.IO.File.Delete(fil);

    using (var s = System.IO.File.AppendText(fil))
    {
        for (int i = 0; i < 10000; i++)
            s.WriteLine(Guid.NewGuid().ToString());
    }
}

Opgave

  • Skab en asynkron metode async Task<string> HentTekst(string filnavn), der ved hjælp af en StreamReader (System.IO.File.OpenText) læser filen (brug ReadToEndAsync()), og returnerer resultatet som en Task<string> svarende til filens indhold.
  • Kald metoden fra Main (husk at Main skal være async Task).

💡 Task<string> betyder, at metoden returnerer et “løfte” om en streng, som først er tilgængelig når den asynkrone læsning er færdig.

Tip

💡 Avanceret: Hvis du vil afprøve hvordan brugerfladen reagerer på synkron vs asynkron læsning, kan du bruge en WPF-app i stedet. Se evt. en skabelon på devcronberg/wpf-placeholder.

Klik for at se et forslag til en løsning
static async Task Main(string[] args)
{
    // Brug evt. denne til at skabe en fil først
    // DanFil(@"c:\temp\a1.txt");

    try
    {
        string t1 = await HentTekst(@"c:\temp\a1.txt");
        Console.WriteLine(t1);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

static async Task<string> HentTekst(string fil)
{
    using (var stream = System.IO.File.OpenText(fil))
    {
        return await stream.ReadToEndAsync();
    }
}

static void DanFil(string fil)
{
    if (System.IO.File.Exists(fil))
        System.IO.File.Delete(fil);

    using (var s = System.IO.File.AppendText(fil))
    {
        for (int i = 0; i < 10000; i++)
            s.WriteLine(Guid.NewGuid().ToString());
    }
}