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 atMainskal 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());
}
}