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 enStreamReader
(System.IO.File.OpenText
) læser filen (brugReadToEndAsync()
), og returnerer resultatet som enTask<string>
svarende til filens indhold. - Kald metoden fra
Main
(husk atMain
skal væreasync 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());
}
}