C# await erklärung?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
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.

Woher ich das weiß:Berufserfahrung

Tastaturbrix 
Fragesteller
 27.09.2019, 12:03

Vielen Dank sehr hilfreich.
Ja wie gesagt bin noch echt neu ^^

0

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 ^^

Woher ich das weiß:Studium / Ausbildung – Softwareentwickler mit 10 Jahren Berufserfahrung 💾