C# await erklärung?
Hallo,
mal wieder eine frage zu C# ^^
Kann mir jemand die genaue Erläuterung für das Schlüsselwort await geben ?
Hab im Internet zwar paar Infos gefunden aber nichts wo mir wirklich weiterhilft.
Hat jemand gute beispiele ?
In diesem beispiel, verstehe ich nicht wo ich den await setzten kann/muss ??
Bin noch echt ein Neuling im Thema Async.
Paar beispiel bzw Erklärungen würden mir echt weiterhelfen....
static async Task<string> SchreibeAsync()
{
var text = "Hallo Telefon 123456";
string path = Directory.GetCurrentDirectory() + $@"Test.txt";
Task task = new Task(() => {
using (StreamWriter sw = new StreamWriter(path))
{
for (int i = 0; i < 50; i++)
{
Thread.Sleep(100);
sw.WriteLine(text);
}
}
});
}
2 Antworten
static Task<string> SchreibeAsync()
{
return Task.Run(async() =>
{
var text = "Hallo Telefon 123456";
string path = @"{Directory.GetCurrentDirectory()}Test.txt";
using (StreamWriter sw = new StreamWriter(path))
{
for (int i = 0; i < 50; i++)
{
await Task.Delay(100);
sw.WriteLine(text);
}
}
return path;
});
}
// Aufruf innerhalb einer async Methode :
var datei = await SchreibeAsync();
So wäre dein Beispiel korrekt. Das Schlüsselwort ASYNC benötigt man nur, wenn innerhalb des folgenden Blocks ein AWAIT kommen wird - ansonsten ist es ein Task.
Im Grunde ist es so, dass aller Code abgearbeitet wird bis zu der Stelle an der das await kommt. Hier wird gewartet, da meist das Ergebnis in den folgenden Statements benutzt werden muss bzw. die Vorarbeit geleistet sein muss, bevor die weitere Ausführung stattfinden kann.
Übrigens instanziert man Task nicht mit "new" s.o.
Vielen Dank sehr hilfreich.
Ja wie gesagt bin noch echt neu ^^
await hält den Programmzeiger solange fest, bis der abhängige asynchrone Vorgang abgeschlossen ist. Schau mal die Beispiele hier an https://docs.microsoft.com/await
Beim Lesen des Quellcodes kannst du die Anweisung hinter dem await lesen wie "warte auf ..."
In deinem Beispiel könntest du das await for den Funktionsaufruf setzen.
await SchreibeAsync();
//dann bleibt der Hauptthread hier stehen bis SchreibeAsync fertig ist
Wenn es jemand besser erklären kann bitte ergänzen, habe selbst noch nie mit dem Operator gearbeitet ^^